gpt4 book ai didi

django - Django(音频)文件验证

转载 作者:行者123 更新时间:2023-12-03 12:45:40 25 4
gpt4 key购买 nike

我正在尝试一个允许用户上传音频文件的网站。我已经阅读了所有可以动手使用的文档,但是找不到太多有关验证文件的信息。

这里共有newb(以前从未做过任何形式的文件验证),并试图弄清楚这一点。有人可以牵着我的手告诉我我需要知道什么吗?

与往常一样,先谢谢您。

最佳答案

您需要先验证文件,然后再将其写入磁盘。当您上载文件时,表单将得到验证,然后上载的文件将被传递到处理程序/方法,该处理程序/方法用于实际写入服务器上的磁盘。因此,在这两个操作之间,您需要执行一些自定义验证,以确保它是有效的音频文件

你可以:

  • 检查文件是否小于一定大小(好的做法)
  • ,然后检查提交的文件是否具有特定的内容类型(即音频文件)
  • 这几乎没有用,因为有人可以轻易地欺骗它
  • 然后检查文件是否以某个扩展名(或多个扩展名)结尾
  • 这也很没用
  • 尝试读取文件,看看它是否实际上是音频

  • (我尚未测试此代码)

    models.py
    class UserSong(models.Model):
    title = models.CharField(max_length=100)
    audio_file = models.FileField()

    forms.py
    class UserSongForm(forms.ModelForm):
    # Add some custom validation to our file field
    def clean_audio_file(self):
    file = self.cleaned_data.get('audio_file',False):
    if file:
    if file._size > 4*1024*1024:
    raise ValidationError("Audio file too large ( > 4mb )")
    if not file.content-type in ["audio/mpeg","audio/..."]:
    raise ValidationError("Content-Type is not mpeg")
    if not os.path.splitext(file.name)[1] in [".mp3",".wav" ...]:
    raise ValidationError("Doesn't have proper extension")
    # Here we need to now to read the file and see if it's actually
    # a valid audio file. I don't know what the best library is to
    # to do this
    if not some_lib.is_audio(file.content):
    raise ValidationError("Not a valid audio file")
    return file
    else:
    raise ValidationError("Couldn't read uploaded file")

    views.py
    从utils导入handle_uploaded_file
    def upload_file(request):
    if request.method == 'POST':
    form = UserSongForm(request.POST, request.FILES)
    if form.is_valid():
    # If we are here, the above file validation has completed
    # so we can now write the file to disk
    handle_uploaded_file(request.FILES['file'])
    return HttpResponseRedirect('/success/url/')
    else:
    form = UploadFileForm()
    return render_to_response('upload.html', {'form': form})

    utils.py
    # from django's docs
    def handle_uploaded_file(f):
    ext = os.path.splitext(f.name)[1]
    destination = open('some/file/name%s'%(ext), 'wb+')
    for chunk in f.chunks():
    destination.write(chunk)
    destination.close()

    https://docs.djangoproject.com/en/dev/topics/http/file-uploads/#file-uploads
    https://docs.djangoproject.com/en/dev/ref/forms/fields/#filefield
    https://docs.djangoproject.com/en/dev/ref/files/file/#django.core.files.File

    关于django - Django(音频)文件验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6194901/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com