【问题标题】:How to set filename property in BlobStore?如何在 BlobStore 中设置文件名属性?
【发布时间】:2011-08-07 13:23:32
【问题描述】:

我正在以编程方式上传图像文件并想设置文件名。当我通过 POST 上传文件时,文件名属性会自动设置。但是,当使用下面的方法时,文件名没有被设置。

        image = urllib2.urlopen(url)
        file_name = files.blobstore.create(mime_type='image/png')
        with files.open(file_name, 'a') as f:
            f.write(image.read())
        files.finalize(file_name)  
        image_blob_key = files.blobstore.get_blob_key(file_name) 

【问题讨论】:

    标签: python google-app-engine blobstore


    【解决方案1】:

    从 url 解析文件名(参见相关问题here)。然后你可以通过在你的 files.blobstore.create 调用中添加一个额外的参数来设置它:

    file_name = files.blobstore.create(mime_type='image/png',_blobinfo_uploaded_filename=file_name_from_url)
    

    【讨论】:

    • 谢谢。您介意链接到您获得创建调用的完整签名的位置吗?我找不到任何文档。
    • 不久前我遇到了这个问题,老实说,我认为我必须在源代码中找到它。 ...\appengine\api\files\blobstore.py
    • API 函数不应依赖带下划线前缀的参数——它们将来可能会改变。可移植的解决方案是将文件名存储在引用 BlobStore blob 的实体中。
    • @Nick Johnson 很高兴知道此参数可能会发生变化。我在 blob 上设置文件名的目的是允许使用该名称提供文件,即 self.send_blob(blob_info,save_as=True)。此功能还有其他解决方法吗?
    • 只是一个注释。文件 API 已被弃用,因此此答案将在 2015 年 7 月结束时不再有效。
    【解决方案2】:

    我知道这是一个老问题,但是......

    self.send_blob(blob_info,save_as=True) 允许您代替 True 来指定字符串。这意味着该文件将使用提供的字符串作为文件名来提供。因此,一种解决方案是让您将文件名与 blobkey 一起保留,然后当您使用 send_blob 提供这些文件时,您将文件名作为参数提供。您不关心文件将如何存储,您只关心文件将如何提供。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多