Я пытаюсь загрузить изображение на S3 с помощью Angular и Laravel 5.1.ОПЦИИ ERR_NAME_NOT_RESOLVED при загрузке файла на s3
Угловой сначала запрашивает мое приложение-сервер для назначенного URL-адреса, затем переходит к загрузке файла с использованием подписанного запроса.
Я получаю следующее сообщение об ошибке OPTIONS, когда подпись возвращается, а затем пытается загрузить с него:
OPTIONS https://s3.us-standard.amazonaws.com/my.resources/dog-aromatherapy.jpg?x-a…Signature=b3ef83... net::ERR_NAME_NOT_RESOLVED
My.Resources S3 Bucket 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 у дает? У меня есть действующий CORS конфигурации на правильное ведро S3, и я получаю, казалось бы, presigned подпись затем разрешить загрузку файлов ...
Нажатие на ошибку OPTIONS, заголовки следующим образом:
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', который является провал? Я вижу только «GET/PUT/POST», но ему также нужны «ОПЦИИ» – Ohgodwhy
Добавление ' OPTIONS AllowedMethod>' в s3 CORS дает ошибку 'Найденный неподдерживаемый HTTP-метод в конфигурации CORS. Неподдерживаемый метод - OPTIONS' –
Growler
. На самом деле существует другой способ сделать это на S3. Я не поклонник S3, но я знаю, что когда вы создаете ведро, у вас есть возможность выбирать 'HEAD + OPTIONS', а не только' HEAD'. Я не знаю, как изменить его после того, как вы создали ведро, извините. – Ohgodwhy