【问题标题】:How to download a file with its original filename from GAE's blobstore?如何从 GAE 的 blobstore 下载具有原始文件名的文件?
【发布时间】:2012-08-25 10:11:33
【问题描述】:

将文件上传到 blobstore 后,它会将其重命名为“s9QmBqJPuiVzWbySYvHVRg==”。如果您导航到它的“/serve” URL 来下载文件,下载的文件将被命名为这个乱七八糟的字母。

有没有办法让下载的文件在上传时保留其原始文件名?

【问题讨论】:

    标签: google-app-engine http-headers filenames blobstore


    【解决方案1】:

    在 GAE 管理员console,BLOB 查看器部分,当您查看单个 BLOB 时,查看器的右下方有一个下载按钮,如下面的屏幕截图所示。

    【讨论】:

    • 我想知道多米诺骨牌是否总是显示下载按钮。我有一个类型为 (application/x-compress) 的文件,它还说它太大而无法预览 - 没有下载链接。
    【解决方案2】:

    当使用BlobUploadHandler 上传文件时 原始文件名作为名称属性存储在新创建的BlobInfo 实体中。

    在 blob 服务处理程序中,您可以指定应将 blob 作为下载附件返回,并且您可以指定应使用什么名称保存它

    from google.appengine.ext import webapp
    import urllib
    
    class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler):
      def get(self, blob_info_key=None):
        blob_info_key = str(urllib.unquote(blob_info_key))
        blob_info = retrieve_blob_info(blob_info_key)
        self.send_blob(blob_info, save_as=blob_info.filename)
    
    
    blob_app = webapp.WSGIApplication([
      ('/_s/blob/([^/]+)', blob.ServeHandler),
    ], debug=config.DEBUG)
    

    【讨论】:

    • 在使用实验性 API 直接将文件写入 blobstore 时,是否可以指定 blob_info.filename?
    • @Chris-Top 这太棒了!谢谢你:)
    • 是的,通过file api写blob的时候,可以指定一个名字,方法如下:file_name = files.blobstore.create( mime_type=content_type, _blobinfo_uploaded_filename=blob_name, )
    【解决方案3】:

    您引用的代码是 BlobInfo 实体的键,但原始文件名存储为属性。

    如果您想要一种通过文件名下载文件的简单方法,您可以使用我用于 ServeHandler 的代码,它可以满足我的需要,通过文件名而不是 blobstore 键下载文件:

    class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler):
      def get(self, resource):
        blobs = blobstore.BlobInfo.gql("WHERE filename = '%s'" %(urllib.unquote(resource)))
        if blobs.count(1) > 0:
            blob_info = blobstore.BlobInfo.get(blobs[0].key())
            self.send_blob(blob_info,save_as=True) 
    

    【讨论】:

      猜你喜欢
      • 2012-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-25
      相关资源
      最近更新 更多