4

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

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

4

3 回答 3

6

当使用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)
于 2012-08-30T17:10:52.143 回答
0

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

在此处输入图像描述

于 2012-08-30T16:55:39.417 回答
0

您引用的代码是 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) 
于 2013-05-12T23:47:48.917 回答