2017-11-23 19 views
1

ここにコンテキストがあります。私はPython3.6でDjangoを使用しており、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にとして登録されている、それが正常に動作しています。

しかし、私は非常に大きいファイルをアップロードしようと、5カ月のようにしてフォーマットしてQTは(.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' 

私はDjangoが処理していることをオンラインで読みますサイズに応じてファイルが違ってくるので、それが原因であると私は信じています。

しかし、いくつかの情報に加えて、私は私の問題の解決策を見つけることができませんでした。

私がここで間違っていることはありますか?

+0

これはあなたを助けるかもしれないhttps://stackoverflow.com/questions/8249042/uploading-large-files-with-python-django –

+0

ありがとう、それは私がすでに見てきた問題です、私はそれがどのように役立つか見るしかし、私は自分のモデルのFileFieldを更新するためにそれを使う方法を知らない。 – VisionElf

答えて

0

私は自分の問題を修正しました。私はひどい間違いを犯しました。

私は検証ステップでファイルの名前を変更していました。問題は、それが< 2.5Mbである画像とビデオのために働いたので、私はそれがそれから来るかもしれないと思っていませんでした。

修正するために、バリデーターの名前を変更し、FileFieldのupload_toパラメーターで設定したメソッドを編集しました。

関連する問題