2

整个问题几乎都在标题中。

我可以在该类上找到的唯一文档是非常节省的cgi 文档,它至少没有提到该类如何接收文件、它是如何存储的、它支持什么功能等。

我对上传文件的存储位置非常感兴趣。显然它不在内存中,因为Bottle提到该FileStorage.read()功能对大文件很危险。如果它放在磁盘上,我想将它移动到一个永久位置,而不必在 Python 中通读它,将它一点一点地复制到一个新位置。

但是由于课程的文档很差,我不知道从哪里开始。有任何想法吗?

4

3 回答 3

2

有点晚了,但我自己调查了一下:

这一切都归结为 cgi.py 中的“make_file”方法:

def make_file(self, binary=None):
    import tempfile
    return tempfile.TemporaryFile("w+b")

tempfile 文档 ( http://docs.python.org/2/library/tempfile.html ) 表明该文件是在从与平台相关的列表中选择的默认目录中创建的,但用户可以通过以下方式控制目录位置设置环境变量之一:TMPDIR、TEMP 或 TMP。

另请注意文档:

在 Unix 下,文件的目录条目在文件创建后立即被删除。其他平台不支持;您的代码不应依赖于使用此函数创建的临时文件,该文件在文件系统中具有或不具有可见名称。

希望这可以帮助。

于 2013-08-28T16:17:10.953 回答
0

我希望这会有所帮助:

http://epydoc.sourceforge.net/stdlib/cgi.FieldStorage-class.html

cgi.FieldStorage()

  • 一个“文件名”,
  • 一个“值”——文件本身,
  • 一个“文件”和
  • 一种”

还有别的……你可以在文档中阅读。

这是我的代码:

f_sd=open(tempfilesd,'r+b')
newdata_sd = cgi.FieldStorage()
newdata_sd.filename='sdfile.jpg'
newdata_sd.name='file'
newdata_sd.file=f_sd
form.vars.file = newdata_sd
于 2020-10-15T19:04:08.880 回答
-1

FieldStorage.file属性实际上不是文件而是cStringIO对象,在文档上描述为内存文件: http: //docs.python.org/library/stringio.html

也许这可以帮助你一点。

于 2012-08-10T11:03:21.927 回答