如何在 BlobStore 中设置文件名属性?

Posted

技术标签:

【中文标题】如何在 BlobStore 中设置文件名属性?【英文标题】:How to set filename property in 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) 

【问题讨论】:

【参考方案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 提供这些文件时,您将文件名作为参数提供。您不关心文件将如何存储,您只关心文件将如何提供。

【讨论】:

以上是关于如何在 BlobStore 中设置文件名属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 build.gradle 文件中设置属性以在 Java 中访问该属性

如何在 FileList 对象中设置文件对象和长度属性,其中文件也反映在 FormData 对象中?

如何在 FolderBrowserDialog 中设置只读属性

如何在html中设置img属性的绝对路径

如何从属性文件中设置Kafka参数?

如何在 Rider 中设置 Xamarin.ios 视图的属性? (如何更新自动生成的 View.designer.cs?)