将文件上传到blobstore后,会将其重命名为“s9QmBqJPuiVzWbySYvHVRg ==”。如果您导航到其“/ serve”URL以下载文件,则下载的文件将被命名为这个混乱的字母。
有没有办法让下载的文件在上传时保留其原始文件名?
答案 0 :(得分:6)
使用BlobUploadHandler
上传文件时
原始文件名作为name属性存储在新创建的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)
答案 1 :(得分:0)
在GAE admin console,BLOB查看器部分,当您查看单个BLOB时,查看器右下角有一个下载按钮,如下面的屏幕截图所示。
答案 2 :(得分: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)