gpt4 book ai didi

python - 我怎样才能在 twisted.web 中完成不糟糕的文件上传?

转载 作者:太空狗 更新时间:2023-10-29 20:24:47 25 4
gpt4 key购买 nike

我搜索了又搜索,但似乎找不到以任何合理方式将文件上传到我的 twisted.web 应用程序的方法。

目前,将文件上传发布到资源会产生一个 request.args['file'] 变量,这是一个填充有文件内容的列表。我找不到获取有关文件的任何信息的方法:MIME 类型、文件名、文件大小(除了获取 args['file'][] 中字符串的长度)等.

我读到 twisted.web2 更擅长文件上传。但是,我不知道有多好,或者我将如何使用 twisted.web2 来处理 twisted.web 应用程序中的文件上传。

有什么建议吗?这让我很烦——哦,我查看了请求 header ,并没有真正发现任何重要的东西。我怎样才能获得更多有关使用 Twisted 上传文件的元信息?

另外,

我怎样才能从请求对象中获取纯 HTTP 请求?可能吗?

最佳答案

这是一个老问题,但是快速搜索 stackoverflow 并没有找到类似的问题/答案,所以这里是一个使用 twisted.web2 进行文件上传的快速示例。

隐藏的表单变量 file_foo 与文件上传变量,以显示 Twisted 将如何拆分它们:

<form action="/upload?a=1&b=2&b=3" enctype="multipart/form-data"
method="post">
<input type="hidden" name="foo" value="bar">
<input type="hidden" name="file_foo" value="not a file">
file_foo: <input type="file" name="file_foo"><br/>
file_foo: <input type="file" name="file_foo"><br/>
file_bar: <input type="file" name="file_bar"><br/>
<input type="submit" value="submit">
</form>

在您的 Resource.render() 方法中,您可以通过以下方式访问表单变量:

def render(self, ctx):
request = iweb.IRequest(ctx)
for key, vals in request.args.iteritems():
for val in vals:
print key, val

print 'file uploads ----------------'
for key, records in request.files.iteritems():
print key
for record in records:
name, mime, stream = record
data = stream.read()
print ' %s %s %s %r' % (name, mime, stream, data)

return http.Response(stream='upload complete.')

输出:

         a: 1
b: 2 3
foo: bar
file_foo: not a file

file_bar
bar.txt MimeType('text', 'plain', {}) <open file '<fdopen>', mode 'w+b' at 0x2158a50> 'bar data.\n\n'
file_foo
foo.txt MimeType('text', 'plain', {}) <open file '<fdopen>', mode 'w+b' at 0x2158930> 'foo data.\n\n'
foo.txt MimeType('text', 'plain', {}) <open file '<fdopen>', mode 'w+b' at 0x21589c0> 'foo data.\n\n'

关于python - 我怎样才能在 twisted.web 中完成不糟糕的文件上传?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3271155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com