将表单中的文件直接发送到远程服务器

时间:2010-10-13 21:44:21

标签: python django file-upload

在我的应用程序中,我正在处理上传非常大的图像文件。它们将存储在远程服务器上,因此我需要编写一些自定义存储系统(可能使用python的poster模块)。由于大小我想将文件直接发送到媒体服务器而不将它们存储在内存中(“海报”启用)。但所有上传的文件都由UploadHandler类处理,后者强制文件以某种方式存储在本地(文件,临时或内存)。那我怎么能解决这个问题?

2 个答案:

答案 0 :(得分:0)

根据docs,UploadedFile类应该有一个返回生成器的方法chunks()。块大小是可配置的(默认为2.5 MB)。所以你可以做那样的事情(从文档中复制):

destination = open('some/file/name.txt', 'wb+')
for chunk in f.chunks():
    destination.write(chunk)
destination.close()

这会将一个接一个的块读入内存并将其写入文件。 (因此在内存中只有一个块)。您可能希望将open()的路径更改为NFS卷,然后每次调用write()只会将当前块发送到NFS。 (NFS将所有文件操作导出为open / write / read / seek / close作为RPC)。 Samba的工作方式类似。

或者,您也可以通过在媒体服务器上运行另一个服务来自己实现这样的机制,该服务提供了一种将块附加到文件的方法。 (无论如何,在我看来,使用NFS或Samba将是更好的选择。)

答案 1 :(得分:0)

您可能会发现xsendfile(snippet)或类似的网络服务器扩展名有用。但是你必须从请求机器启动连接。