【问题标题】:Using a form to upload a file to the Google App Engine using a static URL使用表单通过静态 URL 将文件上传到 Google App Engine
【发布时间】:2015-07-30 14:13:27
【问题描述】:

我正在使用 CrashRpt C++ 从我编写的一个软件上传崩溃报告。 Crashrpt 将崩溃报告中的数据上传到程序加载时设置的 URL,就像浏览器使用 Web 表单一样。

CrashRpt 像这样的 HTML 发送数据

<html>
<form action="THE_WEBSITE" method="POST" enctype="multipart/form-data">
Application name:<input type="text" name="appname">
Application version:<input type="text" name="appversion">
Email from:<input type="text" name="emailfrom">
Email subject:<input type="text" name="emailsubject">
Crash GUID:<input type="text" name="crashguid">
MD5:<input type="text" name="md5">
Attach ZIP file:<input type="file" name="crashrpt">
<input type="submit" name="Submit">
</form>
</html> 

我们拥有的唯一网络服务是 Google App Engine。有什么方法可以实际使用表单将文件上传到静态地址,而不是需要动态地址的 blobstore。

我假设没有。

【问题讨论】:

  • 是的,您可以使用:cgi.FieldStorage。在您的处理程序中使用示例:file_data = self.request.get("file")
  • 有人可以确认这会起作用吗,因为当我使用 self.request.get("file") 或 self.request.get("crashrpt") 时它确实不存在
  • 在此处查看我的答案代码:stackoverflow.com/questions/25084667/…

标签: google-app-engine blobstore


【解决方案1】:

这是一个简单的、独立的示例,说明如何使用 GAE 将文件上传(小 -- 小于 1 MB!)到静态 url(在此示例中,仅使用文本文件,因为这就是我显示它们的方式):

import webapp2

from google.appengine.api import users
from google.appengine.ext import ndb

class UserFile(ndb.Model):
  filename = ndb.StringProperty()
  filedata = ndb.BlobProperty()


class UploadFormHandler(webapp2.RequestHandler):
    def get(self):
        self.response.out.write('<html><body>')
        self.response.out.write('<form action="/upload_file" method="POST" enctype="multipart/form-data">')
        self.response.out.write(
        '''Upload File: <input type="file" name="file"><br>
        <input type="submit" name="submit" value="Submit">
        </form></body></html>''')


class UploadHandler(webapp2.RequestHandler):
    def post(self):
        thefile = self.request.POST.get('file')

        filename = thefile.filename
        userfile = UserFile(
          id=filename, filename=filename,
          filedata=thefile.value)
        userfile.put()

        self.redirect('/view_file/%s' % filename)


class ViewHandler(webapp2.RequestHandler):
    def get(self, fileid):
        k = ndb.Key(UserFile, fileid)
        userfile = k.get()

        self.response.headers['Content-Type'] = 'text/plain'
        self.response.write(userfile.filedata)


app = webapp2.WSGIApplication([('/', UploadFormHandler),
                               ('/upload_file', UploadHandler),
                               ('/view_file/([^/]+)?', ViewHandler),
                              ], debug=True)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 2020-04-04
    • 2014-11-22
    • 1970-01-01
    • 2011-01-04
    相关资源
    最近更新 更多