我想將檔案從一個檔案夾復制到同一個 S3 存盤桶上的另一個檔案夾。執行此操作時出現錯誤,NoSuchKey: The specified key does not exist我的代碼如下所示。
sess, err := session.NewSession(&aws.Config{Region: aws.String("ap-south-1")})
if err != nil {
return nil, err
}
Oldpath := "folder1/folder2/a b.pdf"
newBaseFolder := "folder3"
svc := s3.New(sess)
bucketName := "mybucket.test"
source := bucketName "/" oldPath // Oldpath = "folder1/folder2/a b.pdf"
//newBaseFolder = "folder3"
newPath := newBaseFolder "/" strings.SplitN(oldPath, "/", 2)[1] //newPath = "folder3/folder2/a b.pdf"
_, err = svc.CopyObject(&s3.CopyObjectInput{
Bucket: aws.String(bucketName), // bucketName = "mybucket.test"
CopySource: aws.String(url.PathEscape(source)),
Key: aws.String(newPath)})
if err != nil {
return nil, err
}
錯誤資訊
{
"err": "NoSuchKey: The specified key does not exist."
"status code": 404
}
uj5u.com熱心網友回復:
可能的原因是url.PathEscape將路徑中的斜杠替換為/
uj5u.com熱心網友回復:
使用url.QueryEscape而不是 url.PathEscapeasurl.QueryEscape可以編碼特殊字符,例如無法編碼 的字符url.PathEscape(這種技術對我有用)。
...
_, err := svc.CopyObject(
&s3.CopyObjectInput{
Bucket: aws.String("document.as.a.service.test"),
CopySource: aws.String(url.QueryEscape(source)),
Key: aws.String(newPath),
},
)
...
有時如果copySource沒有正確編碼錯誤可以顯示為NoSuchKey: The specified key does not exist
為避免混淆,Go-AWS-SDKcopyObject函式copySource將是現有檔案的路徑,并且Key 是您希望復制檔案的新路徑或目標。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/416576.html
標籤:
下一篇:適當地回購S3minio/aws
