如何解决Django direct_cloud_upload 没有提交文件检查表单上的编码类型
我正在尝试使用库 direct_cloud_upload 将文件直接上传到 Google Cloud Storage Bucket,而无需通过我的 cloudrun(绕过 32Mb请求限制)。
不幸的是,我一直有这个错误:没有提交文件。检查表单上的编码类型。当我尝试上传文件时在管理字体端,即使文件已成功上传到存储。
显然我遗漏了一些东西,这是我的代码:
models.py
class AudioFileModel(models.Model):
title = models.CharField(max_length=80)
audio_file = models.FileField(upload_to='audio/')
class Meta:
ordering = ['title']
def __str__(self):
return f"{self.title}"
forms.py
from .models import AudioFileModel
from django import forms
from google.cloud.storage import Client
import direct_cloud_upload
import os
from direct_cloud_upload import CloudFileWidget
from google.oauth2 import service_account
credentials = service_account.Credentials.from_service_account_file(
'service-account-key.json'
)
client = Client(credentials=credentials)
gcs_bucket = client.get_bucket(os.environ.get("GS_BUCKET_NAME"))
ddcu_bucket_identifier = direct_cloud_upload.register_gcs_bucket(gcs_bucket)
class UploadAudioFileForm(forms.ModelForm):
class Meta:
model = AudioFileModel
fields = ('title','audio_file')
widgets = {
'audio_file': CloudFileWidget(
bucket_identifier=ddcu_bucket_identifier,path_prefix="audio_file_new/",)
}
}
urls.py
from .views import *
import direct_cloud_upload
urlpatterns = [
path("admin/",admin.site.urls),path('upload_audio_file.html',AudioFileUploadView,name='AudioFileUploadView'),path('direct_cloud_upload/',include(direct_cloud_upload.urlpatterns)),]
views.py
from .forms import UploadAudioFileForm
from django.http import HttpResponse
def AudioFileUploadView(request):
if request.method == 'POST':
form = UploadAudioFileForm(request.POST,request.FILES)
if form.is_valid():
form.save()
return HttpResponse('The file is saved')
else:
form = UploadAudioFileForm()
context = {
'form': form,}
return render(request,'upload_audio_file.html',context)
我使用 python 3.8.6 和 django 3.1.6
解决方法
事实证明模型中的字段应该是 CharField。
models.py
class AudioFileModel(models.Model):
title = models.CharField(max_length=80)
audio_file = models.CharField(max_length=160)
class Meta:
ordering = ['title']
def __str__(self):
return f"{self.title}"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。