Ошибка памяти при выполнении `request.POST.copy ()’

#django #tastypie

#django #tastypie

Вопрос:

У меня есть приложение Django, которое позволяет пользователям загружать файлы. Я делаю это с помощью tastypie rest, он отлично работает с файлами обычного размера. но при загрузке файла размером 500 МБ возникает ошибка.

ошибка возникает при:

 multipart_data = request.POST.copy()
  

Ошибка:

 Traceback (most recent call last):
  File "<env_path>libsite-packagestastypieresources.py", line 227, in wrapper
    response = callback(request, *args, **kwargs)
  File "<env_path>libsite-packagestastypieresources.py", line 467, in dispatch_list
    return self.dispatch('list', request, **kwargs)
  File "<env_path>libsite-packagestastypieresources.py", line 499, in dispatch
    response = method(request, **kwargs)
  File "<env_path>libsite-packagestastypieresources.py", line 1405, in post_list
    deserialized = self.deserialize(request, request.body, format=request.META.get('CONTENT_TYPE', 'application/json'))
  File "<project_path>appsdata_managerrest.py", line 70, in deserialize
    multipart_data = request.POST.copy()
  File "<env_path>libsite-packagesdjangocorehandlerswsgi.py", line 110, in _get_post
    self._load_post_and_files()
  File "<env_path>libsite-packagesdjangohttprequest.py", line 315, in _load_post_and_files
    self._post, self._files = self.parse_file_upload(self.META, data)
  File "<env_path>libsite-packagesdjangohttprequest.py", line 275, in parse_file_upload
    return parser.parse()
  File "<env_path>libsite-packagesdjangohttpmultipartparser.py", line 254, in parse
    chunk = handler.receive_data_chunk(chunk, counters[i])
  File "<env_path>libsite-packagesdjangocorefilesuploadhandler.py", line 174, in receive_data_chunk
    self.file.write(raw_data)
MemoryError
  

Ответ №1:

Согласно документации MemoryFileUploadHandler не предназначен для больших файлов.

итак, приведенное ниже решение работает, в settings.py :

 FILE_UPLOAD_HANDLERS = [        
    'django.core.files.uploadhandler.TemporaryFileUploadHandler',
]