본문 바로가기
Django

Django image URL을 통해 model에 저장하기

by Django_ 2021. 5. 18.
반응형

디자인 에디터 API에게 이미지 결과를 돌려 받는 작업을 하게 되었습니다.

전달해주는 이미지는 임시 파일로 저장되어 일정 시간이 지나면 해당 API에서 사라지는 것이였습니다.

그렇기때문에 URL만 저장하면 소용이 없었고, 이미지를 Django media 서버에 저장해야했습니다.

간단하게 이미지를 메모리에 적재시켰다가 저장하면 될줄 알았습니다.

from django.core.files.uploadedfile import InMemoryUploadedFile

 

제가 몰라서 그런건지 이미지를 가져오는것까지는 순탄하게되었지만 model에는 저장이 되질 않았습니다.

그렇다고 Error를 뱉는것도 아닌 모든게 동작하면서 파일만 존재하지 않았습니다.

그래서 파일로 임시로 저장했다가 다시 업로드하는 방식을 찾다가 쉽고 깔끔한 방법을 찾았습니다

 

import tempfile
import requests


response = requests.get(item_image_url, stream=True)
file_name = ''.join(item_image_url.split('/')[-2:]) # 파일명으로 사용
tmp_img = tempfile.NamedTemporaryFile() # 임시파일 생성

# 이미지 response를 분할로 받기 위함
for block in response.iter_content(1024 * 8):
    if not block:
       break
    tmp_img.write(block)
    
model.image_field.save(file_name, files.File(tmp_img))

단 몇 줄 만에 몇일의 고민이 해소가 되었습니다.

여러분들은 고생하지마세요! ㅎ

 

외국 블로그에서 찾은것이지만 출처를 남기기 위해 다시 찾아봤지만 못찾았습니다

혹시 출처를 아시는분은 댓글 남겨주시면 출처를 남기도록 하겠습니다~

반응형

댓글