我正在尝试从我的网站下载一些文件并将其上传到amazons3。
这是我的代码:
[Test]
public void PairsEqual()
{
var p1a = new Pair<int>(10, 1);
var p1b = new Pair<int>(10, 1);
var p2 = new Pair<int>(10, 2);
var equals = GetValueTypeEquals();
Assert.That(!equals(p1a, p2));
Assert.That(equals(p1a, p1a));
Assert.That(equals(p1a, p1b));
}
我一直得到一个nil指针取消引用的运行时错误,错误没有多大帮助,但由于某种原因,我认为它可能与ssl有关,但这里是整个错误:
import (
"log"
"net/http"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3/s3manager"
)
func main() {
// Make a GET request to an image to be downloaded and uploaded to s3
resp, err := http.Get("http://my-site.com/image.jpg")
if err != nil {
log.Fatal(err)
}
// Get the AWS credentials
creds := credentials.NewSharedCredentials("/Users/name/.aws/credentials", "default")
// Set up config
config := &aws.Config{
Region: aws.String("US Standard"),
Credentials: creds,
}
// Set up a new AWS session
sess := session.New(config)
// Set up a new s3manager client
uploader := s3manager.NewUploader(sess)
result, err := uploader.Upload(&s3manager.UploadInput{
Body: resp.Body,
Bucket: aws.String("mimi-movies"),
Key: aws.String("mimi.jpg"),
})
if err != nil {
log.Fatalln("Failed to upload", err)
}
log.Println("Successfully uploaded to", result.Location)
}
答案 0 :(得分:4)
由于@ user3666882提到了aws-go-sdk中的错误,你应该查看你所在的地区。
在您的代码中,您已编写代码以获取AWS Credential。
// Get the AWS credentials
creds := credentials.NewSharedCredentials("/Users/name/.aws/credentials", "default")
您可以在终端中尝试:
aws configure
配置你的aws-sdk。
否则你可以使用Minio。但是你必须在代码中加入ACCESS_KEY_ID和SECRET_ACCESS_KEY,这对于生产使用来说非常糟糕。
s3Client, err := minio.New("s3.amazonaws.com", "YOUR-ACCESSKEYID", "YOUR-SECRETACCESSKEY", false)
此外,您可以使用外部API Viper来隐藏这些键。但我建议您使用官方AWS SDK for Go。
答案 1 :(得分:2)
aws-go-sdk上有一个错误,但解决方案是将区域更改为“us-east-1”
// Set up config
config := &aws.Config{
Region: aws.String("us-east-1"),
Credentials: creds,
}
答案 2 :(得分:0)
您可以选择使用http://localhost:3000/tasks)客户端库,其开放源代码库和与AWS S3兼容。
以下是Minio-go
的简单示例package main import ( "log" "os" "github.com/minio/minio-go" ) func main() { // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-testfile, my-bucketname and // my-objectname are dummy values, please replace them with original values. // Requests are always secure (HTTPS) by default. Set insecure=true to enable insecure (HTTP) access. // This boolean value is the last argument for New(). // New returns an Amazon S3 compatible client object. API compatibility (v2 or v4) is automatically // determined based on the Endpoint value. s3Client, err := minio.New("s3.amazonaws.com", "YOUR-ACCESSKEYID", "YOUR-SECRETACCESSKEY", false) if err != nil { log.Fatalln(err) } object, err := os.Open("my-testfile") if err != nil { log.Fatalln(err) } defer object.Close() n, err := s3Client.PutObject("my-bucketname", "my-objectname", object, "application/octet-stream") if err != nil { log.Fatalln(err) } log.Println("Uploaded", "my-objectname", " of size: ", n, "Successfully.") } Status API Training Shop Blog About
希望它有所帮助。
免责声明:我为Put an object
工作