7

因此,我在 appengine 上启动并运行了一个 django 应用程序,并在用户上传文件时让它创建文件。我遇到的问题是试图弄清楚如何删除它们。我创建它们的代码看起来像。

from google.appengine.api import files

file = request.FILES['assets_thumbnail']
filename = '/gs/mybucketname/example.jpg'
writable_file_name = files.gs.create(filename, mime_type='image/jpeg', acl='public-read')
with files.open(writable_file_name, 'a') as f:
    f.write(file.read())
files.finalize(writable_file_name)

这工作正常,但在文档中:

https://developers.google.com/appengine/docs/python/googlestorage/functions

没有列出删除方法。但是,如果您在下面的链接中查看 google.appengine.api.files 的实际来源(第 504 行)

http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/api/files/file.py

我可以调用一个删除方法,但我终其一生都无法弄清楚它想要的参数。我已经尝试了很多与存储桶名称等不同的组合。它似乎希望它以 /blobstore/ 开头,这与我迄今为止在与 Cloud Storage 交互时所做的任何其他事情都不同。我一直在查看 google.appengine.api.files 编写在其之上的底层 blobstore 类,但仍然无法弄清楚如何删除项目。看起来我可能需要为我上传的项目找到 BlobKeys。我可以使用谷歌托管的基于网络的存储桶管理器以及它们提供的 gsutil 命令行实用程序来很好地删除它们。

有没有人通过部署到应用程序引擎的 python 应用程序从谷歌云存储中成功删除文件?非常感谢任何线索/想法/想法。

4

3 回答 3

14

我来到这里寻找一种用 python 清空谷歌存储目录的方法。是app-engine实现的一种解决方法(更适用于这个问题),但在 python 脚本中可能很有用。

from google.cloud import storage
bucket_name = 'my-bucket'
directory_name = 'this/is/my/path/'

client = storage.Client()
bucket = client.get_bucket(bucket_name)
# list all objects in the directory
blobs = bucket.list_blobs(prefix=directory_name)
for blob in blobs:
    blob.delete()
于 2018-07-10T16:36:30.197 回答
7

AppEngine 1.7.0 版支持使用 blobstore API 删除 Google Storage 对象。

key = blobstore.create_gs_key('/gs/my_bucket/my_object')
blobstore.delete(key)

或者,您可以使用 REST API 调用 Google Storage 以删除文件。

https://developers.google.com/storage/docs/reference-methods#deleteobject

于 2012-05-12T22:13:29.547 回答
-2

在开始执行此类任务之前,从 GCS 中删除对象非常危险,请阅读有关最佳实践的信息,否则请遵循以下步骤:

    from google.cloud import storage 
    # bucket_name = "your-bucket-name"
    # blob_name = "your-object-name"   
    storage_client = storage.Client()

    bucket = storage_client.bucket(bucket_name)
    blob = bucket.blob(blob_name)
    blob.delete()

    print("Blob {} deleted.".format(blob_name))
于 2021-08-05T11:07:06.193 回答