何らかの理由で、S3バケット内のファイルがインラインで表示されるのではなくダウンロードとして強制されているため、画像リンクをコピーしてアドレスバーに貼り付けてから移動すると、ブラウザーがダウンロードするように促されます。代わりに、実際に開いている画像をクリックしてURLに移動する必要があります。
S3からファイルを提供する方法を変更する方法
何らかの理由で、S3バケット内のファイルがインラインで表示されるのではなくダウンロードとして強制されているため、画像リンクをコピーしてアドレスバーに貼り付けてから移動すると、ブラウザーがダウンロードするように促されます。代わりに、実際に開いている画像をクリックしてURLに移動する必要があります。
S3からファイルを提供する方法を変更する方法
回答:
$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
));
Content-Typeを変更する必要があります。S3コンソールから、オブジェクトを右クリックして[プロパティ]を選択すると、[メタデータ]の下にあります。プログラムで行うこともできます:http://docs.amazonwebservices.com/AWSSDKforPHP/latest/index.html#m=AmazonS3/change_content_type
添付ファイルの代わりにインラインのコンテンツ処理も指定する必要があります。
$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
));
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
}
)
awscliでも同じことができます。注s3のドキュメントを*.jpeg
確認してください
aws s3 cp \
--exclude "*" \
--include "*.jpeg" \
--content-type="image/jpeg" \
--metadata-directive="REPLACE" \
--recursive \
--dryrun \
s3://<bucket>/<path>/ \
s3://<bucket>/<path>/
または、一度に1つのオブジェクトを変更する場合は、s3apicopy-objectを使用することをお勧めします。
aws s3api copy-object \
--content-type="image/jpeg" \
--metadata-directive="REPLACE" \
--copy-source "<bucket>/<key>" \
--bucket "<bucket>" \
--key "<key>" \
--acl public-read
これを試すことができます。ブラウザですでにURLを開いている場合は、ContentTypeをブラウザで開く必要があります。その後、シークレットモードで試してください。
var params = {
Bucket: config.BUCKET_NAME,
Key: fileName,
ContentEncoding: 'base64',
ContentDisposition: 'inline',
ContentType: 'image/jpeg',
Body: buf
};
あなたはこれを試すことができます、これは私のために働きます。
const params = {
Bucket: 'bucket-name',
Body: file,
ACL: 'public-read',
ContentType: contentType,
ContentEncoding: 'base64',
ContentDisposition: 'attachment',
};
空の値を渡すと、ContentType
ダウンロードせずにファイルが開くことがわかりました。
これは、あらゆる種類の拡張子のファイルをアップロードするときに実際に便利です。
$s3->putObject(
[
'Bucket' => ..,
'Key' => ..,
'Body' => ..,
'ContentType' => '', <---
'ACL' => 'public-read',
]);
Java SDKを使用している人がこれに対する解決策を見つけている場合は、コンテンツタイプをObjectMetaDataに設定する必要があります。
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentType("image/png");
s3client.putObject(new PutObjectRequest
(bucketName, fileName + ".png", inputStream,
objectMetadata).withCannedAcl(CannedAccessControlList.PublicRead));