Skip to main content
 首页 » 编程设计

python之使用 Google App Engine 请求类获取上传的文件名

2025年05月04日22birdshome

我有一个允许文件上传的 HTML 表单。我需要通过电子邮件发送上传的文件。我正在关注 Google appengine 请求类 example .

    from google.appengine.ext import webapp 
    from google.appengine.api import mail 
 
    class MyRequestHandler(webapp.RequestHandler): 
       def get(self): 
          self.response.out.write(''' 
          <html> 
            <body> 
              <form method="post"> 
                <p>File: <input type="file" name="upload" /></p> 
                <p><input type="submit" /></p> 
              </form> 
            </body> 
          </html> 
          ''') 
 
       def post(self): 
          uploaded_file = self.request.get("upload") 
          uploaded_name = "file.doc" 
          message = mail.EmailMessage(sender="Me <me@mydomain.com>", 
                        subject="Email from me") 
          message.to = "Me <me@mydomain.com>" 
          message.body = "See attached file." 
          message.attachments = [(uploaded_name, uploaded_file)] 
          message.send() 

上面的代码有效。我需要将 message.attachments 元组中的硬编码文件名 (file.doc) 替换为上传文件的实际名称。我有两个问题:

  1. 如何从 webapp Request 类获取上传的文件名?
  2. 我在哪里可以找到描述如何执行此操作的文档?我进行了大量搜索,但找不到引用资料或示例。

更新: 看起来解决方案是:

 if uploaded_file != "": 
    uploaded_name = self.request.params["upload"].filename 

...已发布 here .

请您参考如下方法:

不要使用 self.request.get("upload"),而是尝试检查 self.request.POST["upload"] 字典。

具体来说,self.request.POST['upload'] 将返回一个 cgi.FieldStorage 实例。您要查找的属性是 filename。同样感兴趣的是 mimetype - 当然还有 data。

有关处理上传的完整操作方法,请查看 this ancient post在 Nick Johnson 的博客上。

要深入了解 webapp2 请求数据的工作原理,请参阅 this portion webapp2 文档。