【问题标题】:Losing file properties on resumeable upload Google Cloud Storage在可恢复上传 Google Cloud Storage 时丢失文件属性
【发布时间】:2015-08-15 18:21:06
【问题描述】:

我在使用 Google Cloud 存储的可恢复上传音乐和视频文件时遇到了麻烦。即某些属性在上传时会丢失,然后从存储桶中下载回来。

详情:(左边是原始文件,右边是下载文件)

常规:(左边是原始文件,右边是下载文件)

这不一定是音频的问题,但它是视频的问题,因为浏览器现在不会在浏览器中播放它。

上传过程和这个question差不多

执行初始可恢复上传的小代码示例:

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 云存储桶中的结果将具有正确的 mimetype 视频/mp4(由浏览器决定),但仍无法在浏览器上查看。

编辑:

我也尝试在收到可恢复的上传链接后使用 chrome 扩展“邮递员”上传文件,但在上传到 GCS 时它的属性也丢失了,所以它似乎与所涉及的 JS 端无关将文件上传到 GCS。

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

【问题讨论】:

  • 嗨,Rohan,查看您的代码并阅读行为,看起来这实际上可能是平台的问题。你介意在我们的问题跟踪器上发布这个吗? code.google.com/p/googleappengine/issues/list。如果您可以包含这个和一个压缩的最小项目来重现您的上传,那将非常有帮助(基本上是您在此处拥有的代码,带有正确的配置文件,在一个 zip 中)。谢谢:)
  • 我们开始吧:code.google.com/p/googleappengine/issues/detail?id=12268。期待修复!

标签: google-cloud-storage


【解决方案1】:

事实证明,当从浏览器通过 HTML“输入”表单提交到 Google Cloud Storage 时,文件已损坏。但是,如果用同一个URL通过JavaScript发布文件,文件并没有损坏,这很奇怪。

我正在让 GCS 团队调查这个问题,看看是否有解决办法。

完整的详细信息以及解决方法如下: https://code.google.com/p/googleappengine/issues/detail?id=12268

感谢您与我一起调查此事!

【讨论】:

  • 此问题的链接是私密的,公众无法查看
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-25
  • 2021-04-25
  • 2018-04-20
  • 2016-05-26
  • 2016-06-17
  • 2021-11-22
相关资源
最近更新 更多