728x90
ImageField를 사용하면서 이미지를 저장을 파일명을 변경해서 저장
추가 사항으로 임의에 파일명으로 바꾸는 방법으로 진행한다.
[문제 요약]
1. 파일명이 한글일 경우 읽지 못하는 상황
2. mac os 에서는 읽을 수 있지만 window 환경에서는 읽지 못하는 파일명
[풀이 요약]
1. uuid 를 사용하여 임의에 파일명 생성
2. 파일명을 변환해주는 함수(instance, filename) 생성
3. ImageField 필드의 upload_to 파라미터에 2번에서 만들어준 함수 설정
[코드]
1. models.py
import os
from uuid import uuid4
def rename_imagefile_to_uuid(instance, filename): # instance : Feed 모델에서 __str__로 반환해주는 값 현재는 title로 지정
# filename : 원본 파일명
upload_to = f'original_feed_images/' # 파일 저장 위치 설정
ext = filename.split('.')[-1] # 원본 파일명 text.jpg->[text, jpg]로 나누어주고 -1 번째 값만 ext에 담아주기
uuid = uuid4().hex # 50da5daca34d4802a771047ee463c234 이런 형식에 임의에 이름 생성
filename = '{}.{}'.format(uuid, ext) # '{uuid}.{ext}' -> 50da5daca34d4802a771047ee463c234.jpg
# format(uuid, ext) -> uuid = 파일명, ext = 파일 형식
return os.path.join(upload_to, filename) # DB에 저장할 값을 리턴
class Feed(models.Model): # 피드
user = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=30)
content = models.TextField(max_length=255)
original_image = models.ImageField(blank=True, upload_to=rename_imagefile_to_uuid, null=True) # upload_to 파라미터에 위에서 만들어준 함수 지정
transfer_image = models.ImageField(blank=True, upload_to="transfer_feed_images/", null=True) # 기존 ImageField
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return str(self.title)
728x90
반응형
'Sparta Coding Club > Today I Learned [TIL]' 카테고리의 다른 글
[TIL] #DAY - 059 - (1) 자바스크립트 코드 모음 (javascript) (0) | 2022.11.28 |
---|---|
[TIL] #DAY - 058 - forEach를 이용하여 div 추가 (javascript, Django) (0) | 2022.11.25 |
[TIL] #DAY - 056 - (3) 무신사 크롤링? 스크랩핑!(브랜드별 할인율) (0) | 2022.11.23 |
[TIL] #DAY - 055 - (2) 무신사 크롤링? 스크랩핑!(카테고리 정보) (0) | 2022.11.22 |