我有一个相当简单的代码,可以使用Golang将文件上传到Google Cloud Storage。
func upload(object *storage.ObjectHandle, b []byte) error {
w := object.NewWriter(context.Background())
if _, err = w.Write(b); err != nil {
return err
}
return w.Close()
}
我上传了许多文件,没有任何问题,但是昨天我注意到其中一个文件已损坏。我相当确定文件是在上传期间损坏的,因为我是根据文件内容的MD5哈希命名文件的。我相信Google云端存储在调用
w.Close()
时应该返回了错误,但没有返回。确保传输中断/损坏时上传始终失败的最佳方法是什么? 最佳答案
您可以在上传字节之前和之后尝试以下检查:
之后立即直接从云存储中读回时,请确保这两个都相同。当然,这可能会影响性能,但可以确保您获得放入GCS的能力。
但是,这不是唯一可以看到损坏的地方-如果客户端停止将坏数据传输或传输到服务器,则不会检测到它。如果是这样,那么最好在上载之前以其他方式检查完整性。如果您的文件属于已知类型,则还可以通过验证其是否确实为有效的jpg文件来检查完整性。
最好尝试重现并准确找出损坏发生的位置,以验证您的假设,即GCS应该返回错误,然后静默破坏提供给它的数据,这可能是最好的。