Golang s3没有找到文件,服务器在上传图片时出现恐慌

时间:2016-12-01 00:36:05

标签: go amazon-s3

首先我是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"/>

1 个答案:

答案 0 :(得分:2)

@ user1591668,

您的错误是&#34;错误打开文件:打开55fc14631c00004800082775.jpeg:没有这样的文件或目录&#34;。听起来与AWS的SDK无关。

检查您的二进制文件是否实际在图像文件所在的相同目录中启动(&#34;工作目录&#34;),或者,为了测试此假设,您可以尝试使用绝对路径到图像。

干杯, 丹尼斯