google-app-engine - Golang 将文件从 URL 保存到 AppEngine 中的 GCS Bucket

标签 google-app-engine go

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

鉴于我的 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
        }
}

最佳答案

您似乎在寻找 Writer和一个 bytes.Buffer :

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

关于google-app-engine - Golang 将文件从 URL 保存到 AppEngine 中的 GCS Bucket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41794004/

相关文章:

java - 为 appengine 的数据存储区编写基本查询

python - Google App Engine 中的证书存储

unicode - 未读取 golang unicode/norm 迭代器的最后一个 rune

go - 在 Go (golang) 中,如何使用一个 `range` 迭代两个数组、 slice 或映射

python - 尝试通过AWS Lambda连接到Google Analytics API,这个 "ModuleNotFoundError: No module named ' google.appengine'“是什么意思

google-app-engine - App Engine Bulkloader 如何禁用 "Backing off due to errors"

python - 在 App Engine 应用程序中放置缓存驱逐逻辑的最佳位置在哪里?

docker - 如何通过简单地从头开始在容器中设置随机 UID 来创建非 root 用户?

html - xml.NewDecoder(resp.Body).Decode给出EOF错误_GOLang

go - 选择默认 channel 竞争条件