首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Python/Django上传大文件

使用Python/Django上传大文件
EN

Stack Overflow用户
提问于 2011-11-24 05:03:36
回答 3查看 26.7K关注 0票数 32

我想知道使用Django/Python通过web应用程序上传大约4 4GB大小的文件是否有任何影响?我记得在过去,使用Java的流式上传是首选的方法,但是现在仍然是这样吗,或者使用Django/Python这样做是完全安全的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-24 08:13:50

默认情况下,如果上传的文件数据小于2.5MB,Django会将其放入内存中。任何较大的内容都将写入服务器的/tmp目录,然后在传输完成时进行复制。Django的许多文件上传设置都可以自定义,详细信息可以在the documentation中找到。您还可以自定义文件处理,您肯定会希望这样做。

在我们考虑任何技术约束之前,使用浏览器上传如此大的文件会给用户带来非常糟糕的体验。没有关于传输进展的反馈(尽管google chrome会以百分比的形式显示上传状态),也没有办法暂停或恢复传输。

您还可能在服务器上遇到问题。除了每个线程处理流数据所花费的时间非常长之外,您还有时间让系统将结果文件从/tmp复制到正确的位置。

除非您非常有信心可以预见服务器在上传过程中可能出现的任何问题,否则我认为这不是一个好主意。通过google很难找到这方面的任何信息,而且似乎确实有很多描述大文件上传问题的点击量。

虽然Django在技术上能够接收如此大的上传文件,但非常糟糕的用户体验和技术困难意味着这可能不是最好的方法。您是否考虑过使用专用软件来处理文件传输?

票数 37
EN

Stack Overflow用户

发布于 2014-04-18 00:51:52

最后一个答案涵盖了这一点。我们通常上传2.5mb+ (但通常不是4 4gb)

adamnish链接是正确的,请参阅此代码片段(来自他的link to django docs),了解如何将文件写入磁盘,而不是先将其放入内存:

代码语言:javascript
复制
def handle_uploaded_file(f):
    with open('some/file/name.txt', 'wb+') as destination:
        for chunk in f.chunks():
            destination.write(chunk)

有关"chunks“调用的更多信息:https://docs.djangoproject.com/en/dev/ref/files/uploads/#django.core.files.uploadedfile.UploadedFile.chunks

页面包括如何设置“块”大小等。

票数 9
EN

Stack Overflow用户

发布于 2019-03-19 21:07:45

对于未来的读者:要在内存中设置max filesize allowed,请在settings.py中设置以下内容

代码语言:javascript
复制
FILE_UPLOAD_MAX_MEMORY_SIZE = 5242880 # make it 5Mb instead of 2Mb

当然,这对4 4Gb的内存不会有帮助。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8249042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档