AmazonS3Exception:此操作不支持 x-amz-website-redirect-location header
AmazonS3Exception: x-amz-website-redirect-location header is not supported for this operation
我在尝试将数据从 Android 客户端上传到 AWS 时遇到一个有趣的异常:
com.amazonaws.services.s3.model.AmazonS3Exception: x-amz-website-redirect-location header is not supported for this operation. (Service: Amazon S3; Status Code: 400; Error Code: InvalidArgument; Request ID: E3900749ACF1D979), S3 Extended Request ID: kFjMM7JVFSOxvaKlHgM0bVM5zKZAR/0K8qeMyt44vjvtMFcGk8CxY9gDBDs0sqWmr8r2jcCyENo=
用户位于中国区,数据上传under VPN
(香港)到西区buckethttp://currentidmedia.s3-ap-southeast-1.amazonaws.com
有关以下请求的更多详细信息:
PUT http://currentidmedia.s3-ap-southeast-1.amazonaws.com / Headers: (Expect: 100-continue, Content-Type: application/octet-stream, Date: Fri, 05 Jun 2015 10:13:01 GMT+00:00, Content-Length: 0, User-Agent: aws-sdk-android/2.2.1 Linux/3.4.0-g8a80a0e Dalvik/2.1.0/0 en_US com.amazonaws.mobileconnectors.s3.transfermanager.TransferManager/2.2.1, x-amz-website-redirect-location: /storage/emulated/0/DCIM/Camera/IMG_20150601_153423.jpg, Accept-Encoding: identity, Authorization: AWS AKIAIYL3TJHYVMB4SFRQ:dAkmOJxaIe5viO5kNjz74I/UKSc=, )
是SDK有问题还是我使用不当?
更新:
// set up credentials
AWSCredentials awsCredentials = new BasicAWSCredentials(
awsMetadata.getAccountId(),
awsMetadata.getSecretKey()
);
// set up request
PutObjectRequest request = new PutObjectRequest(
awsMetadata.getBucketName(),
FileUtil.extractNameFromPath(mediaItem.getContentUri()),
mediaItem.getContentUri()
);
// perform request
TransferManager transferManager = new TransferManager(awsCredentials);
transferManager.getAmazonS3Client().setRegion(getRegionForMedia(awsMetadata));
transferManager.upload(request, listener);
答案是我使用 PutObjectRequest 的方式不正确。它包含几个构造函数,如果您将 String 传递给内容而不是文件,您将设置重定向 url 而不是数据路径。
但是在修复后,non-China 存储桶出现了相同的 SSLException
错误。我在 VPN
和没有它的情况下使用它。您可以在下面找到有关请求的更多详细信息。
PUT https://currentidmedia.s3-ap-southeast-1.amazonaws.com / Headers: (Content-MD5: GI1M/hfrwwQHvHMBlmh/lA==, Expect: 100-continue, Content-Type: image/jpeg, Date: Sat, 06 Jun 2015 08:56:31 GMT+00:00, Content-Length: 2140572, User-Agent: aws-sdk-android/2.2.1 Linux/3.4.0-g8a80a0e Dalvik/2.1.0/0 en_US com.amazonaws.mobileconnectors.s3.transfermanager.TransferManager/2.2.1, Accept-Encoding: identity, Authorization: AWS AKIAIYL3TJHYVMB4SFRQ:fqWbHO6lBPsbI6lkcaHKhms8Hkw=, )
x-amz-website-redirect-location
元数据仅适用于静态网站。静态网站有一个不同的端点 <bucket-name>.s3-website-<AWS-region>.amazonaws.com
。有关详细信息,请参阅 http://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html。你介意解释一下设置它的目的吗?我看看有没有替代品。
我在尝试将数据从 Android 客户端上传到 AWS 时遇到一个有趣的异常:
com.amazonaws.services.s3.model.AmazonS3Exception: x-amz-website-redirect-location header is not supported for this operation. (Service: Amazon S3; Status Code: 400; Error Code: InvalidArgument; Request ID: E3900749ACF1D979), S3 Extended Request ID: kFjMM7JVFSOxvaKlHgM0bVM5zKZAR/0K8qeMyt44vjvtMFcGk8CxY9gDBDs0sqWmr8r2jcCyENo=
用户位于中国区,数据上传under VPN
(香港)到西区buckethttp://currentidmedia.s3-ap-southeast-1.amazonaws.com
有关以下请求的更多详细信息:
PUT http://currentidmedia.s3-ap-southeast-1.amazonaws.com / Headers: (Expect: 100-continue, Content-Type: application/octet-stream, Date: Fri, 05 Jun 2015 10:13:01 GMT+00:00, Content-Length: 0, User-Agent: aws-sdk-android/2.2.1 Linux/3.4.0-g8a80a0e Dalvik/2.1.0/0 en_US com.amazonaws.mobileconnectors.s3.transfermanager.TransferManager/2.2.1, x-amz-website-redirect-location: /storage/emulated/0/DCIM/Camera/IMG_20150601_153423.jpg, Accept-Encoding: identity, Authorization: AWS AKIAIYL3TJHYVMB4SFRQ:dAkmOJxaIe5viO5kNjz74I/UKSc=, )
是SDK有问题还是我使用不当?
更新:
// set up credentials
AWSCredentials awsCredentials = new BasicAWSCredentials(
awsMetadata.getAccountId(),
awsMetadata.getSecretKey()
);
// set up request
PutObjectRequest request = new PutObjectRequest(
awsMetadata.getBucketName(),
FileUtil.extractNameFromPath(mediaItem.getContentUri()),
mediaItem.getContentUri()
);
// perform request
TransferManager transferManager = new TransferManager(awsCredentials);
transferManager.getAmazonS3Client().setRegion(getRegionForMedia(awsMetadata));
transferManager.upload(request, listener);
答案是我使用 PutObjectRequest 的方式不正确。它包含几个构造函数,如果您将 String 传递给内容而不是文件,您将设置重定向 url 而不是数据路径。
但是在修复后,non-China 存储桶出现了相同的 SSLException
错误。我在 VPN
和没有它的情况下使用它。您可以在下面找到有关请求的更多详细信息。
PUT https://currentidmedia.s3-ap-southeast-1.amazonaws.com / Headers: (Content-MD5: GI1M/hfrwwQHvHMBlmh/lA==, Expect: 100-continue, Content-Type: image/jpeg, Date: Sat, 06 Jun 2015 08:56:31 GMT+00:00, Content-Length: 2140572, User-Agent: aws-sdk-android/2.2.1 Linux/3.4.0-g8a80a0e Dalvik/2.1.0/0 en_US com.amazonaws.mobileconnectors.s3.transfermanager.TransferManager/2.2.1, Accept-Encoding: identity, Authorization: AWS AKIAIYL3TJHYVMB4SFRQ:fqWbHO6lBPsbI6lkcaHKhms8Hkw=, )
x-amz-website-redirect-location
元数据仅适用于静态网站。静态网站有一个不同的端点 <bucket-name>.s3-website-<AWS-region>.amazonaws.com
。有关详细信息,请参阅 http://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html。你介意解释一下设置它的目的吗?我看看有没有替代品。