Django - 较大的文件无法上传到 heroku

我在向托管在 heroku 上的 django 应用程序发帖时遇到问题。我有一个提交 3 张图像的表单,当我使用大约 100kb 的较小图像时一切正常,但是当我使用 ~3MB 的较大图像时,上传失败并在 heroku 日志中显示为错误at=error code=H13 desc="Connection closed without response" method=POST path="/"


在 django 中,我只是保存图像然后通过电子邮件发送它们,如下所示,其中 formdata 保存图像。希望这个片段足够了:


for each in form_data:

    pic = form_data[each]

    if pic:

        filename = os.path.join(self.location,f"{i} - {pic.name}")

        imgbytes = pic.read()

        with open(filename, 'wb+') as destination:

            destination.write(imgbytes)


        i+=1

        fileholder.append(filename)

email = EmailMessage(

        subject = 'Hello',

        body = 'Body goes here',

        from_email = 'example@yahoo.com',

        to = ['test@google.com'],

        )


for each in fileholder:

    email.attach_file(each)

email.attach_file(newpath)

email.send()

是什么原因造成的,我如何确保成功上传任何尺寸的图像?


慕娘9325324
浏览 143回答 3
3回答

Cats萌萌

好的,所以我发现 heroku 上的所有请求都会在 30 秒后超时,这就是我的情况。上传时间比这更长,我的解决方案是处理上传客户端并直接上传到 S3。

慕码人2483693

Django 有一个设置DATA_UPLOAD_MAX_MEMORY_SIZE防止上传大于 2.5MB 的文件(默认值:2621440(即 2.5 MB))并引发 SuspiciousOperation (RequestDataTooBig) Exception尝试在您的 settings.py 中更改它

12345678_0001

据我所知,几乎所有网络框架都会限制一次请求中的数据大小。比如Django, Tornado, Spring。而且它不安全,如果不限制一个请求的最大大小。正如 MSR974 所说,改变DATA_UPLOAD_MAX_MEMORY_SIZE它是一种改变关于一个请求的最大大小的设置的方法。但是在你的问题中:确保成功上传任何图像大小。关键词是any size尝试分段上传?也就是将一个文件拆分成两个或多个文件,上传到后端后按顺序合并。(希望我解释清楚了)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python