我試圖使用Angular和Laravel 5.1將圖像上傳到S3。將文件上傳到s3時的選項ERR_NAME_NOT_RESOLVED
Angular首先向我的服務器應用程序詢問預先設置的URL,然後繼續使用簽名的請求上傳文件。
,我發現了以下選項錯誤時簽名的回報,然後嘗試用它上傳:
OPTIONS https://s3.us-standard.amazonaws.com/my.resources/dog-aromatherapy.jpg?x-a…Signature=b3ef83... net::ERR_NAME_NOT_RESOLVED
my.resources S3鬥CORS:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Laravel:
public function signature(Request $request)
{
...get Request filename and filetype...
$s3Client = new S3Client([
'region' => 'us-standard',
'version' => 'latest'
]);
$options = [
'Bucket' => getenv('AWS_S3_BUCKET'),
'Key' => $file_name,
'Expires' => 60,
'ContentType' => $file_type,
'ACL' => 'public-read'
];
$cmd = $s3Client->getCommand('PutObject', $options);
$s_request = $s3Client->createPresignedRequest($cmd, '+20 minutes');
$pre_signedUrl = (string) $s_request->getUri();
return response()->json(
[
'signed_request' => $pre_signedUrl,
'url' => 'https://s3.amazonaws.com/' . getenv('AWS_S3_BUCKET') . '/' . $file_name
]
);
}
Wh在給?我對正確的S3存儲有效CORS配置,並且我得到一個看似presigned簽名,然後允許文件上傳...
點擊進入選項錯誤,標題如下:
x-amz-acl:public-read
X-Amz-Content-Sha256:UNSIGNED-PAYLOAD
X-Amz-Algorithm:AWS4-HMAC-SHA256
X-Amz-Credential:AKIA/20160614/us-standard/s3/aws4_request
X-Amz-Date:20160614T172559Z
X-Amz-SignedHeaders:host
X-Amz-Expires:1200
X-Amz-Signature:b3ef836...
但你'CORS'頭不允許'OPTIONS'這是失敗的? – Ohgodwhy
將' OPTIONS AllowedMethod>'添加到s3 CORS在CORS配置中發現錯誤'發現不支持的HTTP方法。不支持的方法是OPTIONS' –
Growler
在S3中實際上有不同的方法。我不是S3的愛好者,但我知道當你創建桶時,你可以選擇'HEAD + OPTIONS'而不是'HEAD'。在創建桶之後,我不知道如何修改它,對不起。 – Ohgodwhy