首先我是Golang的新手,我正在尝试将照片上传到我的s3 Bucket但是每次尝试都会出错,我得到的错误就是这个
错误打开文件:打开55fc14631c00004800082775.jpeg:没有这样的文件或目录2016/11/30 19:28:10 http:panic serving [:: 1]:58502:运行时错误:无效的内存地址或无指针提领 goroutine 5 [正在运行]
我的存储桶权限设置为每个人读写,因此必须是此代码中的内容是错误的
我正在关注此教程https://medium.com/@questhenkart/s3-image-uploads-via-aws-sdk-with-golang-63422857c548#.ahda1pgly,我正在尝试上传此处找到的公开图片http://img.huffingtonpost.com/asset/,scalefit_950_800_noupscale/55fc14631c00004800082775.jpeg
我目前的代码如下:
func UploadProfile(w http.ResponseWriter) {
creds := credentials.NewStaticCredentials(aws_access_key_id, aws_secret_access_key,token)
_, err := creds.Get()
if err != nil {
fmt.Printf("bad credentials: %s", err)
}
config := &aws.Config{
Region :aws.String("us-west-1"),
Endpoint :aws.String("s3.amazonaws.com"),
S3ForcePathStyle:aws.Bool(true),
Credentials :creds,
}
svc := s3.New(session.New(), config)
file, err := os.Open("55fc14631c00004800082775.jpeg")
if err != nil {
fmt.Printf("err opening file: %s", err)
}
defer file.Close()
fileInfo, _ := file.Stat()
var size int64 = fileInfo.Size()
buffer := make([]byte, size)
file.Read(buffer)
fileBytes := bytes.NewReader(buffer)
fileType := http.DetectContentType(buffer)
path := "http://img.huffingtonpost.com/asset/,scalefit_950_800_noupscale/" + file.Name()
params := &s3.PutObjectInput{
Bucket: aws.String("MyBucket"),
Key: aws.String(path),
Body: fileBytes,
ContentLength: aws.Int64(size),
ContentType: aws.String(fileType),
}
resp, err := svc.PutObject(params)
if err != nil {
fmt.Printf("bad response: %s", err)
}
fmt.Printf("response %s", awsutil.StringValue(resp))
fmt.Fprintf(w,"done")
}
我不知道为什么这不起作用,因为我的凭据和存储桶是正确的。另外IMG地址适用于上面的图像,所以不知道为什么文件是nil
<img height="200" width="200" src="http://img.huffingtonpost.com/asset/,scalefit_950_800_noupscale/55fc14631c00004800082775.jpeg"/>
答案 0 :(得分:2)
@ user1591668,
您的错误是&#34;错误打开文件:打开55fc14631c00004800082775.jpeg:没有这样的文件或目录&#34;。听起来与AWS的SDK无关。
检查您的二进制文件是否实际在图像文件所在的相同目录中启动(&#34;工作目录&#34;),或者,为了测试此假设,您可以尝试使用绝对路径到图像。
干杯, 丹尼斯