我正在设置 Docker 容器。
在服务器端,文件上传到S3。
在我本地环境下上传成功。
但是在Docker环境下上传失败。
客户端:React/axios
服务器:Golang/杜松子酒
数据库:mysql
源代码: https: //github.com/jpskgc/article
article
├ client
├ api
└ docker-compose.yml
这是 docker-compose.yml:
version: '3'
services:
api:
build:
dockerfile: Dockerfile.dev
context: ./api
volumes:
- ./api:/app
ports:
- 2345:2345
depends_on:
- db
tty: true
volumes:
- $HOME/.aws/credentials.properties:/home/api/.aws/credentials.properties
这是访问 S3 的服务器端代码。
api := router.Group("/api")
{
api.POST("/post/image", func(c *gin.Context) {
var creds *credentials.Credentials
var err error
creds = credentials.NewSharedCredentials("", "default")
_, err = creds.Get()
if err != nil {
creds = credentials.NewCredentials(&ec2rolecreds.EC2RoleProvider{})
_, err = creds.Get()
}
cfg := aws.NewConfig().WithRegion("ap-northeast-1").WithCredentials(creds)
svc := s3.New(session.New(), cfg)
form, _ := c.MultipartForm()
files := form.File["images[]"]
var imageNames []ImageName
imageName := ImageName{}
for _, file := range files {
f, err := file.Open()
if err != nil {
log.Println(err)
}
defer f.Close()
size := file.Size
buffer := make([]byte, size)
f.Read(buffer)
fileBytes := bytes.NewReader(buffer)
fileType := http.DetectContentType(buffer)
path := "/media/" + file.Filename
params := &s3.PutObjectInput{
Bucket: aws.String("article-s3-jpskgc"),
Key: aws.String(path),
Body: fileBytes,
ContentLength: aws.Int64(size),
ContentType: aws.String(fileType),
}
我希望图像在服务器端上传到 S3。
慕森卡
千万里不及你
PIPIONE
相关分类