사용자 정의django 파일 저장 시스템 업로드 파일 크기 제한
10310 단어 django
MEDIA_URL="/media/" # url
MEDIA_ROOT=os.path.join(BASE_DIR, "media") # ,
MAX_FILE_SIZE = 104857600 # 100MB
2. django의 응용 프로그램 디렉터리(또는 다른 위치)에서 새 파일
storage.py
을 만듭니다. 코드는 다음과 같습니다.class FileTooLarge(Exception):
"""
, exception.py
"""
class LiterDocStorage(FileSystemStorage):
# location base_url , settings ,
def __init__(self, location=settings.MEDIA_ROOT, base_url=settings.MEDIA_URL):
# ,location
super(LiterDocStorage, self).__init__(location, base_url)
def _save(self, name, content):
""" 100MB"""
if content.size > settings.MAX_FILE_SIZE:
raise FileTooLarge(' %sMB' % int((settings.MAX_FILE_SIZE / (1024 * 1024))))
return super(LiterDocStorage, self)._save(name, content)
파일 크기는self를 통과할 수 없습니다.size (name)에서 가져왔습니다. (이 방법은 보기 함수에서 파일 대상을 얻은 후 호출되며 file.size 속성에서 호출된 방법입니다.)
출력 콘텐츠의 유형을 통해 이 콘텐츠는
InMemoryUploadedFile
django.core.files.uploaderdfile
인 것을 알 수 있습니다. 소스 코드는 다음과 같습니다.class InMemoryUploadedFile(UploadedFile):
"""
A file uploaded into memory (i.e. stream-to-memory).
"""
def __init__(self, file, field_name, name, content_type, size, charset, content_type_extra=None):
super().__init__(file, name, content_type, size, charset, content_type_extra)
self.field_name = field_name
def open(self, mode=None):
self.file.seek(0)
return self
def chunks(self, chunk_size=None):
self.file.seek(0)
yield self.read()
def multiple_chunks(self, chunk_size=None):
# Since it's in memory, we'll never have multiple chunks.
return False
속성 크기가 보이기 때문에 콘텐츠를 통해.크기 파일 크기, 단위byte
3. 모델의 설정
class MyModel(models.Model):
upload = models.FileField(upload_to='uploads/', storage=LiterDocStorage())
4. 보기 함수에서 사용
file = request.FILES.get('file') #
try:
MyModel.objects.create(upload=file)
except FileTooLarge as e: # 100MB
code = 1
msg = ' ,%s' % str(e)
참조: FileField
Managing files
FileSystemStorage
사용자 지정 스토리지 시스템 작성
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django의 질문 및 답변 웹사이트환영 친구, 이것은 우리의 새로운 블로그입니다. 이 블로그에서는 , 과 같은 Question-n-Answer 웹사이트를 만들고 있습니다. 이 웹사이트는 회원가입 및 로그인이 가능합니다. 로그인 후 사용자는 사용자의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.