2017-11-23 3 views
1

여기에 컨텍스트가 있습니다. Django를 Python3.6과 함께 사용하고 있으며 Django REST Framework를 사용하여 REST API를 작성하고 있습니다. 페이지에 간단한 양식이 있지만 직접 제출되지는 않습니다. Axios를 사용하여 API를 수동으로 호출합니다.Django : 모델에서 FileField를 사용하여 REST API에 파일 업로드

let form = new FormData(); 
form.append('name', this.game.name); 
form.append('video', this.game.video); 
form.append('icon', this.game.icon); 

axios.post("api/games/", form, {headers: { 
    'Content-Type': 'multipart/form-data', 
}}) 

모든 것이 여기 괜찮 :

다음은 제출 버튼을 누를 때 사용되는 코드입니다. 내 API가 올바른 데이터를 받으면 내 게임 개체를 쉽게 만들 수 있습니다.

주요 문제는 '동영상'입력란입니다. 그것은 500ko처럼 내 models.py

name = models.CharField(max_length=255, unique=True) 
icon = models.ImageField(upload_to=user_directory_path) 
video = models.FileField(upload_to=user_directory_path) 

MP4 비디오 파일 (.MP4)를 제출 한 및 FileField으로 등록되어, 제대로 노력하고 있습니다.

하지만 QT 5 개월처럼과 형식, 훨씬 더 큰 파일을 업로드하려고 할 때 (.MOV), 나는 장고에서 오류가있어 : 나는 온라인으로 읽을

ERROR 2017-11-23 16:59:31,831 exception Internal Server Error: /api/games/ 
Traceback (most recent call last): 
    File "myawesomeproject/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner 
    response = get_response(request) 
    File "myawesomeproject/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "myawesomeproject/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "myawesomeproject/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view 
    return view_func(*args, **kwargs) 
    File "myawesomeproject/lib/python3.6/site-packages/rest_framework/viewsets.py", line 90, in view 
    return self.dispatch(request, *args, **kwargs) 
    File "myawesomeproject/lib/python3.6/site-packages/rest_framework/views.py", line 489, in dispatch 
    response = self.handle_exception(exc) 
    File "myawesomeproject/lib/python3.6/site-packages/rest_framework/views.py", line 449, in handle_exception 
    self.raise_uncaught_exception(exc) 
    File "myawesomeproject/lib/python3.6/site-packages/rest_framework/views.py", line 486, in dispatch 
    response = handler(request, *args, **kwargs) 
    File "myawesomeproject/lib/python3.6/site-packages/rest_framework/mixins.py", line 21, in create 
    self.perform_create(serializer) 
    File "myawesomeproject/lib/python3.6/site-packages/rest_framework/mixins.py", line 26, in perform_create 
    serializer.save() 
    File "myawesomeproject/lib/python3.6/site-packages/rest_framework/serializers.py", line 214, in save 
    self.instance = self.create(validated_data) 
    File "myawesomeproject/api/serializers.py", line 114, in create 
    return super().create(validated_data) 
    File "myawesomeproject/lib/python3.6/site-packages/rest_framework/serializers.py", line 913, in create 
    instance = ModelClass.objects.create(**validated_data) 
    File "myawesomeproject/lib/python3.6/site-packages/django/db/models/manager.py", line 85, in manager_method 
    return getattr(self.get_queryset(), name)(*args, **kwargs) 
    File "myawesomeproject/lib/python3.6/site-packages/django/db/models/query.py", line 394, in create 
    obj.save(force_insert=True, using=self.db) 
    File "myawesomeproject/lib/python3.6/site-packages/django/db/models/base.py", line 808, in save 
    force_update=force_update, update_fields=update_fields) 
    File "myawesomeproject/lib/python3.6/site-packages/django/db/models/base.py", line 838, in save_base 
    updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields) 
    File "myawesomeproject/lib/python3.6/site-packages/django/db/models/base.py", line 924, in _save_table 
    result = self._do_insert(cls._base_manager, using, fields, update_pk, raw) 
    File "myawesomeproject/lib/python3.6/site-packages/django/db/models/base.py", line 963, in _do_insert 
    using=using, raw=raw) 
    File "myawesomeproject/lib/python3.6/site-packages/django/db/models/manager.py", line 85, in manager_method 
    return getattr(self.get_queryset(), name)(*args, **kwargs) 
    File "myawesomeproject/lib/python3.6/site-packages/django/db/models/query.py", line 1076, in _insert 
    return query.get_compiler(using=using).execute_sql(return_id) 
    File "myawesomeproject/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1106, in execute_sql 
    for sql, params in self.as_sql(): 
    File "myawesomeproject/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1059, in as_sql 
    for obj in self.query.objs 
    File "myawesomeproject/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1059, in <listcomp> 
    for obj in self.query.objs 
    File "myawesomeproject/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1058, in <listcomp> 
    [self.prepare_value(field, self.pre_save_val(field, obj)) for field in fields] 
    File "myawesomeproject/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1008, in pre_save_val 
    return field.pre_save(obj, add=True) 
    File "myawesomeproject/lib/python3.6/site-packages/django/db/models/fields/files.py", line 296, in pre_save 
    file.save(file.name, file.file, save=False) 
    File "myawesomeproject/lib/python3.6/site-packages/django/db/models/fields/files.py", line 94, in save 
    self.name = self.storage.save(name, content, max_length=self.field.max_length) 
    File "myawesomeproject/lib/python3.6/site-packages/django/core/files/storage.py", line 54, in save 
    return self._save(name, content) 
    File "myawesomeproject/lib/python3.6/site-packages/django/core/files/storage.py", line 338, in _save 
    file_move_safe(content.temporary_file_path(), full_path) 
    File "myawesomeproject/lib/python3.6/site-packages/django/core/files/move.py", line 58, in file_move_safe 
    with open(old_file_name, 'rb') as old_file: 
FileNotFoundError: [Errno 2] No such file or directory: '/var/folders/wc/6cny2lg147l55mt4zm92zw9m0000gn/T/tmp6xuujgz2.upload' 

장고가 처리되는 것을을 크기에 따라 파일이 다르게 나옵니다.

그러나 일부 정보 외에도 내 문제에 대한 해결책을 찾을 수 없습니다.

내가 여기서 잘못하고있는 것이 있습니까?

+0

이것은 도움이 될 것입니다. https://stackoverflow.com/questions/8249042/uploading-large-files-with-python-django –

+0

감사합니다. 제가 이미 보았던 질문입니다. 어떻게 도움이되는지 보여 드리겠습니다. ,하지만 내 모델의 FileField를 업데이트하기 위해 어떻게 사용하는지 모르겠습니다. – VisionElf

답변

0

문제점이 해결되었습니다. 나는 끔찍한 실수를 저질렀다. 미안하다.

유효성 검사 단계에서 내 파일의 이름을 변경했습니다. 문제는 이미지와 비디오가 < 2.5Mb인데 효과가 있다는 것입니다.

문제를 해결하기 위해 유효성 검사기에서 이름 바꾸기를 제거하고 방금 FileField의 upload_to 매개 변수에서 설정 한 메서드를 편집했습니다.