一旦您将文件上传到Blobstore,它会将其重命名为类似于“s9QmBqJPuiVzWbySYvHVRg ==”这样的名称。 如果您导航到其“/ serve” URL以下载该文件,则下载的文件将以这些字母混合的方式命名。
是否有办法在上传时让下载的文件保留其原始文件名?
一旦您将文件上传到Blobstore,它会将其重命名为类似于“s9QmBqJPuiVzWbySYvHVRg ==”这样的名称。 如果您导航到其“/ serve” URL以下载该文件,则下载的文件将以这些字母混合的方式命名。
是否有办法在上传时让下载的文件保留其原始文件名?
BlobUploadHandler
上传文件时,原始文件名将作为名称属性存储在新创建的BlobInfo
实体中。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)
你所提到的代码是BlobInfo实体的关键,但原始文件名存储为属性。
如果你想通过文件名简单地下载文件,你可以使用我在ServeHandler中使用的这段代码,它适用于我的需求,可以通过文件名而不是blobstore key来下载文件:
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)