云存储文件下载后如何删除?
How to delete a Cloud Storage file after it has been downloaded?
我有一个从云存储中删除文件的云函数
函数:
const { Storage } = require("@google-cloud/storage");
const storage = new Storage();
let handler = async (file, context) => {
console.log(` Event: ${context.eventId}`);
console.log(` Event Type: ${context.eventType}`);
console.log(` Bucket: ${file.bucket}`);
console.log(` File: ${file.name}`);
let bucket = storage.bucket(file.bucket);
let bucketFile = bucket.file(file.name);
bucketFile.delete();
};
我想在下载桶中的任何文件后触发此功能。
我查看了 Cloud Storage 触发器,
google.storage.object.finalize (default)
google.storage.object.delete
google.storage.object.archive
google.storage.object.metadataUpdate
但它们没有按照我希望的方式工作。有人有什么建议吗?
编辑:
如果我需要多解释一下我想做什么;无论是否在我们的系统中注册,都会向用户公开其某些数据的链接 public。由于这些链接可能包含敏感数据,我希望获得一次性下载权。单次下载后需要永久删除数据
如果您激活云存储上的审计日志,您可以捕获 get 事件(注意,云存储上的审计日志会产生大量的日志量并且会产生成本)。
激活审核日志后,您可以过滤该方法名称:
methodName: "storage.objects.get"
当然,您可以在 Cloud Logging 上添加其他过滤器,例如在存储桶 and/or 文件 prefix/suffix 上过滤 resourceName(使用 =~
作为正则表达式)
当你的过滤器正常并且你只得到你期望的条目时,创建一个到 PubSub 的接收器,然后一个 Push PubSub 订阅来调用你的代码(在 Cloud Functions 或 Cloud 运行 上) .
您将收到 Cloud Logging JSON 条目,获取 JSON 中的 resourceName 以了解下载了哪个文件,然后将其删除。
另一种解决方案是使用对象生命周期,您可以在对象创建 1 天(天是最小单位)后自动删除它
您可以在存储桶详细信息页面中找到生命周期设置:
然后您必须添加一个规则,以便在 1 天后删除对象:
我有一个从云存储中删除文件的云函数
函数:
const { Storage } = require("@google-cloud/storage");
const storage = new Storage();
let handler = async (file, context) => {
console.log(` Event: ${context.eventId}`);
console.log(` Event Type: ${context.eventType}`);
console.log(` Bucket: ${file.bucket}`);
console.log(` File: ${file.name}`);
let bucket = storage.bucket(file.bucket);
let bucketFile = bucket.file(file.name);
bucketFile.delete();
};
我想在下载桶中的任何文件后触发此功能。
我查看了 Cloud Storage 触发器,
google.storage.object.finalize (default)
google.storage.object.delete
google.storage.object.archive
google.storage.object.metadataUpdate
但它们没有按照我希望的方式工作。有人有什么建议吗?
编辑:
如果我需要多解释一下我想做什么;无论是否在我们的系统中注册,都会向用户公开其某些数据的链接 public。由于这些链接可能包含敏感数据,我希望获得一次性下载权。单次下载后需要永久删除数据
如果您激活云存储上的审计日志,您可以捕获 get 事件(注意,云存储上的审计日志会产生大量的日志量并且会产生成本)。
激活审核日志后,您可以过滤该方法名称:
methodName: "storage.objects.get"
当然,您可以在 Cloud Logging 上添加其他过滤器,例如在存储桶 and/or 文件 prefix/suffix 上过滤 resourceName(使用 =~
作为正则表达式)
当你的过滤器正常并且你只得到你期望的条目时,创建一个到 PubSub 的接收器,然后一个 Push PubSub 订阅来调用你的代码(在 Cloud Functions 或 Cloud 运行 上) .
您将收到 Cloud Logging JSON 条目,获取 JSON 中的 resourceName 以了解下载了哪个文件,然后将其删除。
另一种解决方案是使用对象生命周期,您可以在对象创建 1 天(天是最小单位)后自动删除它
您可以在存储桶详细信息页面中找到生命周期设置:
然后您必须添加一个规则,以便在 1 天后删除对象: