首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在twisted.web中完成不烂的文件上传?

如何在twisted.web中完成不烂的文件上传?
EN

Stack Overflow用户
提问于 2010-07-17 10:46:00
回答 2查看 5.2K关注 0票数 9

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

当前,将文件上传到资源会产生一个request.args['file']变量,即一个包含文件内容的列表。我找不到关于文件的任何信息: mime类型、文件名、文件大小(除了args['file'][]中字符串的长度外)等等。

我读到过twisted.web2在文件上传方面更好。但是,我不知道它有多好,也不知道如何使用twisted.web2处理twisted.web应用程序中的文件上传。

有什么建议吗?这让我心烦意乱--哦,我看了一下请求头,却没有发现任何有意义的东西。如何获得更多关于Twisted文件上传的元信息?

另外,

我如何才能从请求对象获得原始的HTTP请求?有可能吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-27 12:39:53

这是一个老问题,但是快速搜索堆栈溢出并没有找到类似的问题/答案,下面是一个使用twisted.web2进行文件上传的快速示例。

隐藏的表单变量file_foo与文件上传变量共享相同的名称,以显示Twisted将如何拆分这些变量:

代码语言:javascript
复制
<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()方法中,下面是如何访问表单变量:

代码语言:javascript
复制
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.')

输出:

代码语言:javascript
复制
         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'
票数 5
EN

Stack Overflow用户

发布于 2012-03-21 18:53:50

我这样做就像这里描述的那样:solution for upload。该解决方案使用cgi.FieldStorage解析有效负载。

另外:为了解析的目的,您需要request.content而不是request[args]。正如您所看到的,结果几乎与web2 request.files中的结果相同。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3271155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档