1

这段代码有什么问题?我无法按照 UploadHandler 的响应发送的下载 url 下载 blob。我从服务器收到 404 响应。我对如何发送 blob 密钥的 url 安全版本有疑问。

import urllib
import webapp2
from google.appengine.ext import blobstore
from google.appengine.ext.webapp import blobstore_handlers

MAIN = """<html>
<body>
   <form action="%s" method="POST" enctype="multipart/form-data">
       <p>Upload File:<input type="file" name="file"></p>
       <p><input type="submit" name="submit" value="Submit"> 
   </form>
</body>
</html>
"""

DOWNLOAD = """<html><body><p><a href="%s">%s</a></p></body></html>"""

class MainHandler(webapp2.RequestHandler):
    def get(self):
        upload_url = blobstore.create_upload_url('/upload')
        self.response.out.write(MAIN % upload_url)

class UploadHandler(blobstore_handlers.BlobstoreUploadHandler):
    def post(self):
        upload_files = self.get_uploads('file')  # 'file' is name field in the form
        blob_info = upload_files[0]
        _key = blob_info.key()
        _url = '/download/%s' % str(_key)
        _url_text = blob_info.filename
        self.response.out.write(DOWNLOAD % (_url, _url_text))

class DownloadHandler(blobstore_handlers.BlobstoreDownloadHandler):
    def get(self, resource):
        blob_info = blobstore.Blob.get(resource)
        self.sendblob(blob_info)

app = webapp2.WSGIApplication([('/', MainHandler),
                               ('/upload', UploadHandler),
                               ('/download/<resource>', DownloadHandler)],
                              debug=True) 

app.yaml 文件是应用程序:georef 版本:1 运行时:python27 api_version:1 线程安全:false

libraries:
- name: webapp2
  version: latest

handlers:
- url: /.*
  script: georef.app
4

1 回答 1

1

看起来您从文档中复制并粘贴了错误的代码:

from google.appengine.ext import blobstore
from google.appengine.ext.webapp import blobstore_handlers
class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler):
    def get(self, resource):
        resource = str(urllib.unquote(resource))
        blob_info = blobstore.BlobInfo.get(resource)
        self.send_blob(blob_info)

如果资源字符串中有任何奇怪的字符,您将错过对资源字符串进行解码的行。

于 2013-05-16T14:57:18.460 回答