因此,正如标题所说,如何验证文件是否已成功上传到干净桶.我们有3个桶(未扫描、干净、隔离)和恶意软件扫描器(ClamAV).首先,将文件上传到未扫描的存储桶,然后将其传输到干净或隔离的存储桶.我的问题是如何知道我上传的文件是否已上传到干净的存储桶或隔离的存储桶.我使用Golang作为后台语言.我看到我们有云存储subscription,但当我try 获取消息时,它说

此订阅类型不支持此方法

似乎我们不能这样使用存储订阅.

我能想到的确认上传文件的另一种方法是查询ClamAV扫描的日志(log)并查看文件是否被感染.正确的方法是什么?

在这example中,我不能只是添加:

    err = sub.Receive(ctx, func(ctx context.Context, m *pubsub.Message) {
                fmt.Println(m.Data)
        m.Ack() // Acknowledge that we've consumed the message.
    })

``` it says this method is not supported for this subscription type...

推荐答案

云存储订阅旨在将发布到Pub/Sub的消息写入指定存储桶中的文件.它的目的不是提供有关通过其他方式上传的文件状态的信息.您可能正在寻找的是Pub/Sub notifications for Cloud Storage,当创建、删除、存档存储桶中的文件或更新其元数据时,它将消息发布到Pub/Sub主题.

在您的场景中,您将创建Pub/Sub主题、创建Pub/Sub拉式订阅,并在您的GMS存储桶上创建通知:

> gcloud pubsub topics create TOPIC_NAME
> gcloud pubsub subscriptions create SUBSCRIPTION_NAME --topic=TOPIC_NAME
> gcloud storage buckets notifications create gs://BUCKET_NAME --topic=TOPIC_NAME

在您的订阅者中,您将查找属性eventType设置为OBJECT_FINALIZE的消息:

    err = sub.Receive(ctx, func(ctx context.Context, m *pubsub.Message) {
        event := m.Attributes["eventType"]
        if (event == "OBJECT_FINALIZE") {
            obj := m.Attributes["objectId"]
            fmt.Printf("File %s written successfully.\n", obj)
        }
        m.Ack()
    })

您还可以将订阅设置为filter,以便它仅传递最终消息:

> gcloud pubsub subscriptions create SUBSCRIPTION_NAME \
  --topic=TOPIC_NAME \
  --message-filter 'attributes.eventType = "OBJECT_FINALIZE"'

那么您的代码中就不需要if了.

Go相关问答推荐

gorm插入不支持的数据

运行add. inf,这样我们就可以在app.conf中使用. inf参数了?

获取作为类型参数传递给方法接收方中的类型参数的切片的基础类型

无法读取postman 中的表单数据

该文件位于模块.内,该模块不包含在您的工作区中

「GORM错误」不支持的数据类型:&[],不正确的模式

当图像是对象数组的元素时,如何显示存储为页面资源的图像?

Go:如何在将 float64 转换为 float32 时判断精度损失

Golang Gin 绑定请求正文 XML 到 Slice

Golang模板无法访问embedFS中的文件

在 docker kill --signal=SIGX 上以这种方式关闭容器内运行的 go 应用程序是否安全?

使用 Golang SQL 驱动程序连接到snowflake

Ginkgo/Gomega panic 测试失败

K8s 算子读取原始数据

Go Fyne 禁用 HSplit 调整大小?

Go 使用 struct 作为接口而不实现所有方法

在 Golang 中使用 OR 条件验证 struct 的两个字段

退格字符在围棋操场中不起作用

无法识别同步错误.使用一次

Golang 将类型 [N]byte 转换为 []byte