【问题标题】:Golang Save File from URL to GCS Bucket in AppEngineGolang将文件从URL保存到AppEngine中的GCS存储桶
【发布时间】:2017-01-22 17:30:13
【问题描述】:

我正在尝试 get a image file from URL 并使用文档 here 将其保存到 GCS 存储中。

考虑到我的 AppEngine 环境,我无法弄清楚如何从 response.Body 创建文件到 GSC...我无法使用 os.Create 来创建并引用此环境中的文件路径,对吧?

  • 寻找在 AppEngine 中部署时将 response.Body 传递给 wc.Write() 方法的提示。

获取文件的代码:

func main() {
    url := "http://i.imgur.com/m1UIjW1.jpg"
    // don't worry about errors
    response, e := http.Get(url)
    if e != nil {
        log.Fatal(e)
    }

    defer response.Body.Close()

    //open a file for writing
    file, err := os.Create("/tmp/asdf.jpg")
    if err != nil {
        log.Fatal(err)
    }
    // Use io.Copy to just dump the response body to the file. This supports huge files
    _, err = io.Copy(file, response.Body)
    if err != nil {
        log.Fatal(err)
    }
    file.Close()
    fmt.Println("Success!")
} 

将本地文件保存到 GCS

func (d *demo) createFile(fileName string) {
        fmt.Fprintf(d.w, "Creating file /%v/%v\n", d.bucketName, fileName)

        wc := d.bucket.Object(fileName).NewWriter(d.ctx)
        wc.ContentType = "text/plain"
        wc.Metadata = map[string]string{
                "x-goog-meta-foo": "foo",
                "x-goog-meta-bar": "bar",
        }
        d.cleanUp = append(d.cleanUp, fileName)

        if _, err := wc.Write([]byte("abcde\n")); err != nil {
                d.errorf("createFile: unable to write data to bucket %q, file %q: %v", d.bucketName, fileName, err)
                return
        }
        if _, err := wc.Write([]byte(strings.Repeat("f", 1024*4) + "\n")); err != nil {
                d.errorf("createFile: unable to write data to bucket %q, file %q: %v", d.bucketName, fileName, err)
                return
        }
        if err := wc.Close(); err != nil {
                d.errorf("createFile: unable to close bucket %q, file %q: %v", d.bucketName, fileName, err)
                return
        }
}

【问题讨论】:

    标签: google-app-engine go


    【解决方案1】:

    您似乎正在寻找Writerbytes.Buffer

    var buff bytes.Buffer
    writer := NewWriter(buff)
    n, err := io.Copy(writer, response.Body)
    

    【讨论】:

      猜你喜欢
      • 2020-09-17
      • 2022-10-09
      • 1970-01-01
      • 2022-11-24
      • 2023-01-22
      • 2017-01-27
      • 2020-01-24
      • 1970-01-01
      • 2018-02-07
      相关资源
      最近更新 更多