登录
首页 >  Golang >  Go问答

使用 Golang 自定义字段实现 S3 的分段上传

来源:stackoverflow

时间:2024-02-09 22:27:22 107浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《使用 Golang 自定义字段实现 S3 的分段上传》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

我是 golang 新手,我有如下的 python 代码

import requests
url = "https://bucket.s3-us-east-1.amazonaws.com/"
data = { 'key': 'test.txt' }
files = { 'file': open('/tmp/test.txt', 'rb') }
r = requests.post(url, data=data, files=files)
print "status %s" % r.status_code

这在 python 中可以很好地上传文件,我如何在 golang 中做同样的事情,我尝试了如下

package main

import (
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
    "os"
)

func sendpostrequest(url string, filename string) (string, []byte) {
    client := &http.client{}
    data, err := os.open(filename)
    if err != nil {
        log.fatal(err)
    }
    req, err := http.newrequest("post", url, data)
    req.header.set("content-type", "multipart/form-data")

    if err != nil {
        log.fatal(err)
    }
    resp, err := client.do(req)
    if err != nil {
        log.fatal(err)
    }
    content, err := ioutil.readall(resp.body)
    if err != nil {
        log.fatal(err)
    }
    return resp.status, content
}

func main() {
    status, content := sendpostrequest("https://bucket.s3.amazonaws.com/", "what.html")
    fmt.println(status)
    fmt.println(string(content))
}

所以我从 s3 收到以下错误

The body of your POST request is not well-formed multipart/form-data.

p.s:我已授予对我的 s3 存储桶策略的完全访问权限,并且我正在尝试在没有任何凭据的情况下上传。稍后我将更新此设置以仅适用于我的 vpc。


正确答案


我使用 aws-sdk-for-go 与 S3 交互。你可以尝试一下。大多数 API 都有示例,因此可以相当快地启动您的第一个版本。检查这里 - https://docs.aws.amazon.com/sdk-for-go/api/service/s3/#S3.CreateMultipartUpload

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>