我想知道使用Django/Python通过Web应用程序上传大约4GB大小的文件是否有任何后果?我记得在过去,使用Java进行流式上传是首选的方法,但今天仍然如此,或者使用Django/Python这样做是完全安全的吗?
9bfwbjaz1#
默认情况下,Django会将上传的文件数据放入内存中,如果它小于2。任何更大的文件都将被写入服务器的/tmp目录,然后在传输完成时进行复制。Django的许多文件上传设置都可以自定义,详细信息可以在文档中找到。你也可以自定义文件处理,你肯定想这样做。在我们考虑任何技术限制之前,使用浏览器上传如此大的文件会给用户带来非常差的体验。没有关于传输进行情况的反馈(尽管谷歌chrome确实以百分比显示上传状态),也没有办法暂停或恢复传输。您也可能在服务器上遇到问题。除了每个线程处理流数据所需的极长时间外,系统还需要将结果文件从/tmp复制到正确的位置。除非你非常有信心,你可以预见任何问题,服务器可能与上传,我会建议,这是一个坏主意。通过google很难找到这方面的任何信息,而且似乎有很多关于大文件上传问题的点击。虽然Django在技术上能够接收这么大的上传文件,但非常糟糕的用户体验和技术困难意味着这可能不是最好的方法。您是否考虑过使用专用软件来处理文件传输?
/tmp
6qqygrtg2#
最后一个答案涵盖了它。我们通常上传2。5MB+(但通常不是4GB)adamnish链接是正确的,请参阅此片段(来自他的link to django docs)关于将文件写入磁盘,而不是先将其放在内存中:
def handle_uploaded_file(f): with open('some/file/name.txt', 'wb+') as destination: for chunk in f.chunks(): destination.write(chunk)
关于“chunks”调用的更多信息: www.example.com页面包括如何设置“块”大小等。
9fkzdhlc3#
对于未来的读者:要增大内存存储允许的最大文件大小,请在settings.py中设置以下内容:
settings.py
FILE_UPLOAD_MAX_MEMORY_SIZE = 5242880 # make it 5Mb instead of 2Mb
当然,这对4GB没有帮助。
uxhixvfz4#
如果您使用的是AWS,则可以直接将文件上传到S3。请参阅本教程here。
4条答案
按热度按时间9bfwbjaz1#
默认情况下,Django会将上传的文件数据放入内存中,如果它小于2。任何更大的文件都将被写入服务器的
/tmp
目录,然后在传输完成时进行复制。Django的许多文件上传设置都可以自定义,详细信息可以在文档中找到。你也可以自定义文件处理,你肯定想这样做。在我们考虑任何技术限制之前,使用浏览器上传如此大的文件会给用户带来非常差的体验。没有关于传输进行情况的反馈(尽管谷歌chrome确实以百分比显示上传状态),也没有办法暂停或恢复传输。
您也可能在服务器上遇到问题。除了每个线程处理流数据所需的极长时间外,系统还需要将结果文件从
/tmp
复制到正确的位置。除非你非常有信心,你可以预见任何问题,服务器可能与上传,我会建议,这是一个坏主意。通过google很难找到这方面的任何信息,而且似乎有很多关于大文件上传问题的点击。
虽然Django在技术上能够接收这么大的上传文件,但非常糟糕的用户体验和技术困难意味着这可能不是最好的方法。您是否考虑过使用专用软件来处理文件传输?
6qqygrtg2#
最后一个答案涵盖了它。我们通常上传2。5MB+(但通常不是4GB)
adamnish链接是正确的,请参阅此片段(来自他的link to django docs)关于将文件写入磁盘,而不是先将其放在内存中:
关于“chunks”调用的更多信息: www.example.com
页面包括如何设置“块”大小等。
9fkzdhlc3#
对于未来的读者:要增大内存存储允许的最大文件大小,请在
settings.py
中设置以下内容:当然,这对4GB没有帮助。
uxhixvfz4#
如果您使用的是AWS,则可以直接将文件上传到S3。请参阅本教程here。