前提・実現したいこと
Djangoを使って動画をアップロードし物体検出を行い、さらにその編集された動画を表示するようなwebアプリを作成しようとしています。物体検出部分についてのプログラムは既に作成済みで動画のアップロードと表示部分でつまづいています。動画のアップロードや表示についてこれを使うといいよなどのアドバイスがありましたらぜひ教えていただきたいです。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
forms
1class PostForm(forms.ModelForm): 2 class Meta: 3 model = Post 4 fields = ('image',)
models
1class Post(models.Model): 2 #body = models.CharField(max_length=200) 3 image = models.ImageField(upload_to='media/', null=True, blank=True)
views
1# Make Photo Form 2def save_photo(request): 3 if request.method == 'GET': 4 return render(request, 'todo/watch.html', { 5 'form': PostForm(), 6 'photos': Photo.objects.all(), 7 }) 8 9 elif request.method == 'POST': 10 form = PostForm(request.POST, request.FILES) 11 if not form.is_valid(): 12 print ("NOT VALID") 13 return HttpResponseRedirect(reverse('todo:home')) 14 15 photo = Post() 16 img = form.cleaned_data['image'] 17 photo.image = form.cleaned_data['image'] 18 photo.save() 19 20 return HttpResponseRedirect(reverse('todo:home'))
html
1 <!-- Making Photo Form --> 2 <form action="{% url 'todo:save_photo' %}" method="post" enctype="multipart/form-data"> 3 {% csrf_token %} 4 {{ form }} 5 <input type="submit" value="SAVE" /> 6 </form>
試したこと
画像、テキストファイルのアップロードや表示についてはチュートリアルなどを参考にして、FileField,ImageFieldで行うことができました。
#追記
'FileField'を使用することによって、15MB程度の動画のアップロードが可能になりました。しかしながら、私がアップロードしたい動画(150300MB程度)の動画をアップロードしようとするとサーバーが切断されてしまいます。アップロードしたいファイルサイズが大きい場合はどのようにしたら良いのでしょうか。
補足情報(FW/ツールのバージョンなど)
Django:2.1
Python:3.5
「画像のアップロードはできるけど、動画のアップロードはできない」とはどのような状況でしょうか? 基本的には拡張子(とファイルサイズ)が違うだけなのですから、普通は画像と似たような感じでできると思うのですが。 (やったことはないので、間違ってたらすみません)
私も moscow3 さんと同様の印象を持ちました。画像のアップロードや DB への保存方法などがおわかりになっているのであれば、少なくとも動画のアップロード機能については問題無いものかと思います。動画の表示に関しても画像の表示とそう変わらないのではないかという印象です。具体的にどんなところが課題になっているかお示しになると、課題解決に直結する回答がもらえやすくなると思います。
moscow3 さん、gh640 さん修正依頼ありがとうございます。動画を保存するとなった際にどの部分でファイルサイズをいじったらいいのか、拡張子を決定したらいいのかが現在わからないという状況です。pythonもdjangoも初心者で当たり前のことでしたらすみません。
(回答欄にコメントさせていただいた方がよいかもしれませんが、まだご質問のポイントが理解しきれていないのでこちらでコメントさせていただきますね)ご返信いただきありがとうございます。「ファイルサイズをいじる方法」と「拡張子を決定する方法」がわからない、とのことですが、まずは「拡張子が `.mov` のファイルがアップロードできない問題を解決したい」という理解で正しいでしょうか?この理解で正しければ、まず、 `ImageField` は原則画像ファイルのためのものなので、 `ImageField` ではなく `FileField` を使う形に変えてみてください。変更されると、アップロードはできるようになるものと思います。それでもアップロードができないとなると、具体的にどのようなエラーが出るのか、エラーが出ていなければ何が問題なのか、を具体的に記述されると、回答→問題解決に繋がるものと思います。
gh640 さん、丁寧なご返信ありがとうございます。ご指摘いただいた通り、'FileField'を使用してアップロードを試みたところ、.mp4, .avi, .MOVのファイル選択が可能になりました。また、1KB程度の動画であればアップロードもできDBにも登録ができています。しかしながら、私がアップロードしたいファイルサイズ(150~300MB程度)のファイルをアップロードを行うとサーバーが切断されてしまいます。つまり、アップロードする際のファイルサイズが現在の問題となっています。'settings.py'の'FILE_UPLOAD_MAX_MEMORY_SIZE'を変更してみたりと試してみましたが現状は解決していません。なので、150MB以上の大きいファイルをアップロードする際に必要な処理が分からないというのが問題になっています。
回答2件
あなたの回答
tips
プレビュー