2010-10-13 88 views
1

在我的应用程序中,我正在处理上传真正大的图像文件。他们将存储在远程服务器上,所以从我所能学到的东西中我需要编写一些定制的存储系统(可能使用python的poster模块)。由于尺寸的原因,我希望直接将文件发送到媒体服务器,而不将它们存储在内存中(“海报”允许)。但所有上传的文件都由UploadHandler类处理,这会强制文件以某种方式(文件,temp或内存)本地存储。那么我怎样才能解决这个问题?将文件从表单直接发送到远程服务器

回答

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 as RPC)。桑巴工作原理类似。

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

+0

但我仍然会发送这个数据后运行存储。或者我错了? – mizou 2010-10-13 23:06:33

0

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

+0

不幸的是这不是一个选项 – mizou 2010-10-13 23:04:39

相关问题