微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django direct_cloud_upload 没有提交文件检查表单上的编码类型

如何解决Django direct_cloud_upload 没有提交文件检查表单上的编码类型

我正在尝试使用库 direct_cloud_upload文件直接上传Google Cloud Storage Bucket,而无需通过我的 cloudrun(绕过 32Mb请求限制)。

不幸的是,我一直有这个错误没有提交文件。检查表单上的编码类型。当我尝试上传文件时在管理字体端,即使文件已成功上传到存储。

No file was submitted. Check the encoding type on the form. error

显然我遗漏了一些东西,这是我的代码

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)

我在云运行bug中没有错误,我认为这是一个前端bug。

我使用 python 3.8.6django 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 举报,一经查实,本站将立刻删除。