首页 > 解决方案 > 如何将大于 2.5MB 的文件上传到 django?

问题描述

我的目标是将大于 2.5MB 的文件上传到 django 服务器。我可以上传文件,如果文件小于 2.5MB,如果文件大于 2.5MB,我会413 Payload too large进入浏览器。我不明白为什么。

我在我的settings.py中设置MAX_UPLOAD_SIZE = 429916160 MEDIA_ROOT = os.path.join(BASE_DIR, 'files') MEDIA_URL = '/files/'FILE_UPLOAD_MAX_MEMORY_SIZE = MAX_UPLOAD_SIZE。目前我使用没有 apache 或 nginx 的 django 开发服务器。

我的模型.py:

def validate_file_extension(value):
    ext = os.path.splitext(value.name)[1]  # [0] returns path+filename
    valid_extensions = ['.vsdx']
    if not ext.lower() in valid_extensions:
        raise ValidationError(u'Unsupported file extension.')


class UpLoadFile(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    file = models.FileField(upload_to=path, validators=[validate_file_extension])
    uploaded_at = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.user.username + '/' + self.file.name
class UploadFileForm(forms.ModelForm):
    file = forms.FileField(required=True, label="")

    class Meta:
        model = UpLoadFile
        fields = ('file',)

视图.py:

  if request.method == 'GET':
        upload_file_form = UploadFileForm()
        all_files = UpLoadFile.objects.select_related("user").filter(user__username=request.user).all().order_by("-uploaded_at")
        return render(request, 'interface/files.html', {'page_title': 'Datoteke',
                                                        'files': all_files,
                                                        'upload_file_form': upload_file_form})
    elif request.method == 'POST':
        if "upload-file" in request.POST:
            file_name = request.FILES.get("file")
            username = request.user
            if bool(os.path.exists(f'files/{username}/{file_name}')):
                messages.error(request, "Datoteka s tem imenom že obstaja!")
                return redirect('files')
            else:
                upload_file_form = UploadFileForm(request.POST, request.FILES)
                upload_file_form.instance.user = username
                if upload_file_form.is_valid():
                    upload_file_form.save()
                    messages.success(request, "Datoteka je uspešno dodana!")
                    return redirect('files')
                messages.error(request, "Te vrste datoteke ni mogoče naložiti na server. Preverite če ima datoteka .vsdx končnico.")
                return redirect('files')

我应该设置什么才能上传大于 2.5MB 的文件?我将不胜感激有关如何处理此类文件的任何建议。

标签: djangofile-upload

解决方案


将其包含在您的 settings.py 文件中

DATA_UPLOAD_MAX_MEMORY_SIZE = 50242880

推荐阅读