Google cloud storage 在可恢复上载的Google云存储上丢失文件属性

Google cloud storage 在可恢复上载的Google云存储上丢失文件属性,google-cloud-storage,Google Cloud Storage,我在使用谷歌云存储的可恢复上传音乐和视频文件时遇到了麻烦。也就是说,某些属性在上传后从bucket下载回来时丢失 详细信息:(左侧为原始文件,右侧为下载文件) 概述:(左侧为原始文件,右侧为下载文件) 这对于音频来说不一定是个问题,但对于视频来说却是个问题,因为浏览器现在不会在浏览器中播放它 上传的过程与此大致相同 进行初始可恢复上载的小代码示例: func StoreUpload(c appengine.Context, cn context.Context, contentType str

我在使用谷歌云存储的可恢复上传音乐和视频文件时遇到了麻烦。也就是说,某些属性在上传后从bucket下载回来时丢失

详细信息:(左侧为原始文件,右侧为下载文件)

概述:(左侧为原始文件,右侧为下载文件)

这对于音频来说不一定是个问题,但对于视频来说却是个问题,因为浏览器现在不会在浏览器中播放它

上传的过程与此大致相同

进行初始可恢复上载的小代码示例:

func StoreUpload(c appengine.Context, cn context.Context, contentType string, filename string, email string, origin string) (string, string, error) {
    uuid, err := UUID()

    if err != nil{
        return "", "", err
    }

    filename = uuid + filename[len(filename)-4:]

    tokenSource := google.AppEngineTokenSource(cn, storage.ScopeFullControl)

    token, err := tokenSource.Token()

    if err != nil{
        return "", "", err
    }

    metaBody := []byte("{ \"metadata\": { \"x-goog-meta-uploader\": \""+ email +"\" }}")

    req, err := http.NewRequest(
        "POST",
        fmt.Sprintf("https://www.googleapis.com/upload/storage/v1/b/%s/o?uploadType=resumable&name=upload/%s", models.HYLIGHT_EXTERNAL_BUCKET, filename),
        bytes.NewReader(metaBody),
    )

    req.Header.Set("Authorization", "Bearer " + token.AccessToken)
    req.Header.Set("X-Upload-Content-Type", contentType)
    req.Header.Set("Content-Type", "application/json; charset=UTF-8")
    req.Header.Set("Content-Length", fmt.Sprint(len(metaBody)))
    req.Header.Set("Origin", origin)

    client := &http.Client{
        Transport:  &urlfetch.Transport{
            Context: c,
            Deadline: 20 * time.Second,
        },
    }

    res, err := client.Do(req)

    if err != nil{
        return "", "", err
    }

    return res.Header.Get("Location"), filename, err
}
google cloud bucket中的结果将具有正确的视频/mp4模拟类型(由浏览器决定),但仍然无法在浏览器上查看

编辑:

我还尝试在收到可恢复的上传链接后使用chrome扩展名“Postman”上传文件,但在上传到GCS时其属性也会丢失,因此它似乎与将文件上传到GCS的JS方无关


如果我使用console.developer.google上的“upload folder”(上载文件夹)按钮直接上载其中包含视频文件的文件夹,则会保留该文件的属性。

结果表明,当从浏览器通过HTML“输入”表单提交到谷歌云存储时,该文件已损坏。但是,如果使用相同的URL通过JavaScript发布文件,则文件不会损坏,这非常奇怪

我正在让地面军事系统小组调查这个问题,看看是否有解决办法

完整的详细信息以及解决方法如下:


谢谢你和我一起工作来弄清这件事的真相

嗨,Rohan,查看您的代码并阅读行为,看起来这实际上可能是平台的一个问题。你介意把这个贴在我们的问题追踪器上吗。如果您可以包括这个和一个压缩的最小项目来复制您的上传,这将非常有用(基本上是您在这里的代码,带有正确的配置文件,在zip中)。谢谢:)给你。期待修复!与此问题的链接是私有的,公众无法查看