使用Golang上传时,S3图像下载而非显示



我正在尝试将图像上传到AWS S3。图像保存在bucket中,但当我点击它们(它们的URL(时,它们会下载而不是显示。在过去,这是因为内容类型没有设置为image/jpeg,但我这次验证了它是。

这是我的代码:

func UploadImageToS3(file os.File) error {
fi, err := file.Stat() // get FileInfo
if err != nil {
return errors.New("Couldn't get FileInfo")
}
size := fi.Size()
buffer := make([]byte, size)
file.Read(buffer)
tempFileName := "images/picturename.jpg" // key to save under
putObject := &s3.PutObjectInput{
Bucket:               aws.String("mybucket"),
Key:                  aws.String(tempFileName),
ACL:                  aws.String("public-read"), 
Body:                 bytes.NewReader(buffer),
ContentLength:        aws.Int64(int64(size)),
// verified is properly getting image/jpeg
ContentType:          aws.String(http.DetectContentType(buffer)),
}
_, err = AwsS3.PutObject(putObject)
if err != nil {
log.Fatal(err.Error())
return err
}
return nil
}

我还试着把我的s3.PutObjectInput做成

putObject := &s3.PutObjectInput{
Bucket: aws.String("mybucket"),
Key:    aws.String(tempFileName),
ACL:                  aws.String("public-read"), 
Body: bytes.NewReader(buffer),
ContentLength:        aws.Int64(int64(size)),
ContentType: aws.String(http.DetectContentType(buffer)),
ContentDisposition:   aws.String("attachment"),
ServerSideEncryption: aws.String("AES256"),
StorageClass:         aws.String("INTELLIGENT_TIERING"),
}

我在这里做错了什么?

想明白了。不完全确定为什么,但我需要把所有的价值观分开。

var size int64 = fi.Size()
buffer := make([]byte, size)
file.Read(buffer)
fileBytes := bytes.NewReader(buffer)
fileType := http.DetectContentType(buffer)
path := "images/test.jpeg"
params := &s3.PutObjectInput{
Bucket:        aws.String("mybucket"),
Key:           aws.String(path),
Body:          fileBytes,
ContentLength: aws.Int64(size),
ContentType:   aws.String(fileType),
}
_, err = AwsS3.PutObject(params)

如果有人知道为什么这是有效的,而之前的代码不起作用,请分享。

最新更新