AWS S3 файл отображения inline вместо силы скачать
По какой-то причине файлы в моем ведре S3 принудительно загружаются, а не отображаются в строке, поэтому, если я скопирую ссылку на изображение и вставляю ее в адресную строку, а затем перейду к ней, это будет способствовать загрузке моего браузера. Вместо этого я действительно должен щелкнуть открытое изображение, чтобы перейти к URL.
Любые способы изменить способ подачи файлов с S3
Ответы
Ответ 1
Вам нужно изменить Content-Type. С консоли S3 щелкните правой кнопкой мыши на объекте и выберите "Свойства", а затем "Метаданные". Вы также можете сделать это программно: http://docs.amazonwebservices.com/AWSSDKforPHP/latest/index.html#m=AmazonS3/change_content_type
Ответ 2
$client->putObject(array(
'Bucket' => 'buckname',
'Key' => $destination,
'SourceFile' => $source,
'ContentType' =>'image/jpeg', //<-- this is what you need!
'ACL' => 'public-read'//<-- this makes it public so people can see it
));
Ответ 3
Вы также должны указать расположение содержимого вместо встроенного вместо вложения.
$client->putObject(array(
'Bucket' => 'buckname',
'Key' => $destination,
'SourceFile' => $source,
'ContentType' =>'image/jpeg', //<-- this is what you need!
'ContentDisposition' => 'inline; filename=filename.jpg', //<-- and this !
'ACL' => 'public-read'//<-- this makes it public so people can see it
));
Ответ 4
Если вы используете Python, вы можете установить ContentType следующим образом
s3 = boto3.client('s3')
mimetype = 'image/jpeg' # you can programmatically get mimetype using the 'mimetypes' module
s3.upload_file(
Filename=local_path,
Bucket=bucket,
Key=remote_path,
ExtraArgs={
"ContentType": mimetype
}
)
Вы также можете добиться того же в AWS Cli. Примечание *.jpeg
Проверьте документацию s3
aws s3 cp \
--exclude "*" \
--include "*.jpeg" \
--content-type="image/jpeg" \
--metadata-directive="REPLACE" \
--recursive \
--dryrun \
s3://<bucket>/<path>/ \
s3://<bucket>/<path>/
Кроме того, если вы хотите изменить один объект за раз, вы можете использовать s3api copy-object
aws s3api copy-object \
--content-type="image/jpeg" \
--metadata-directive="REPLACE" \
--copy-source "<bucket>/<key>" \
--bucket "<bucket>" \
--key "<key>" \
--acl public-read
Ответ 5
Вы можете попробовать это, ContentType обязательно для открытия в браузере, если вы уже открыли любой URL в браузере, а затем попробуйте в режиме инкогнито.
var params = {
Bucket: config.BUCKET_NAME,
Key: fileName,
ContentEncoding: 'base64',
ContentDisposition: 'inline',
ContentType: 'image/jpeg',
Body: buf
};