我試圖縮小以下400錯誤請求錯誤:AWS S3 400錯誤的請求
com.amazonaws.services.s3.model.AmazonS3Exception: Bad Request (Service: Amazon S3; Status Code: 400; Error Code: 400 Bad Request; Request ID: 7FBD3901B77A07C0), S3 Extended Request ID: +PrYXDrq9qJwhwHh+DmPusGekwWf+jmU2jepUkQX3zGa7uTT3GA1GlmHLkJjjjO67UQTndQA9PE=
at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1343)
at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:961)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:738)
at com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:489)
at com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:448)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:397)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:378)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4039)
at com.amazonaws.services.s3.AmazonS3Client.getObjectMetadata(AmazonS3Client.java:1177)
at com.amazonaws.services.s3.AmazonS3Client.getObjectMetadata(AmazonS3Client.java:1152)
at com.amazonaws.services.s3.AmazonS3Client.doesObjectExist(AmazonS3Client.java:1212)
at com.abcnews.apwebfeed.articleresolver.APWebFeedArticleResolverImpl.makeS3Crops(APWebFeedArticleResolverImpl.java:904)
at com.abcnews.apwebfeed.articleresolver.APWebFeedArticleResolverImpl.resolve(APWebFeedArticleResolverImpl.java:542)
at sun.reflect.GeneratedMethodAccessor62.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.xfire.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:54)
at org.codehaus.xfire.service.binding.ServiceInvocationHandler.sendMessage(ServiceInvocationHandler.java:322)
at org.codehaus.xfire.service.binding.ServiceInvocationHandler$1.run(ServiceInvocationHandler.java:86)
at java.lang.Thread.run(Thread.java:662)
我測試的imple的東西,因爲這:
boolean exists = s3client.doesObjectExist("aws-wire-qa", "wfiles/in/wire.json");
我手動添加wfiles/in/wire.json文件。當我在本地應用程序中運行此行時,我會回來。但是在一個單獨的遠程服務中,它會拋出上面的錯誤。我在本地應用程序中使用與服務內部相同的憑據。我也設置桶爲「啓用網站託管」,但沒有區別。 我的權限設置爲:
Grantee: Any Authenticated AWS User
y List
y Upload/DeleteView
y PermissionsEdit Permissions
因此,我認爲錯誤可能與不具有對桶的政策,並建立在桶政策文件GET/PUT /刪除對象,但我仍然得到相同的錯誤。我的政策是這樣的:
{
"Version": "2012-10-17",
"Id": "Policy1481303257155",
"Statement": [
{
"Sid": "Stmt1481303250933",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::755710071517:user/law"
},
"Action": [
"s3:DeleteObject",
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::aws-wire-qa/*"
}
]
}
我被告知它不能成爲防火牆或代理問題。我還能嘗試什麼?該錯誤非常具體。到目前爲止,我只做了本地開發,所以我不知道還有什麼不能在這裏設置。非常感謝這裏的一些幫助。
這與權限無關。您可能會將請求發送到錯誤的S3區域。 –
@ Michael-sqlbot:你是對的,我之前正在測試另一個桶,並設法不改變這個區域。非常感謝!正確的目標! – user2917629
權限問題很容易排除,因爲它應該是'403 Forbidden' ......我很高興修正它,但說實話,這只是一個直觀的猜測 - 幾個可能導致一個'400壞請求回覆。我想認爲Java SDK提供了一種訪問響應標題和正文的機制,因爲信息應該在那裏,並且這將提供更合理和有用的答案。 –