強制ダウンロードの代わりにAWSS3ディスプレイファイルをインライン


82

何らかの理由で、S3バケット内のファイルがインラインで表示されるのではなくダウンロードとして強制されているため、画像リンクをコピーしてアドレスバーに貼り付けてから移動すると、ブラウザーがダウンロードするように促されます。代わりに、実際に開いている画像をクリックしてURLに移動する必要があります。

S3からファイルを提供する方法を変更する方法


画像リンクをコピーすると、画像のURLを直接指します。ブラウザは、提供されたURLを実行することを単に理解します。
スニルグラバニ2013年

@SunilGulabaniしかし、ファイルを強制的にダウンロードしなくてもファイルに直接アクセスできる、amazons3を使用しているサイトを見ました。たとえば、画像ホスティングサイトでは、画像に直接アクセスできます。ここで直接ファイルパスを参照しているのは、これが私のS3バケットでホストされているファイルの例です:droplet-files.s3.amazonaws.com/…–
Cl '

1
画像のアップロード中に、提供されたコンテンツタイプが間違っていると思います。image / jpegである必要があります。コンテンツタイプを確認します:en.wikipedia.org/wiki/Internet_media_type
Sunil Gulabani 2013年

1
@SunilGulabaniMINEタイプに関してS3にデータを送信しません。私は単純に:$ s3-> putObjectFile($ tmp、$ Bucket、$ actual_image_name、S3 :: ACL_PUBLIC_READ)and whola
Cl '

$ s3-> create_object($ bucket、$ file_name、array( 'contentType' => 'image / jpeg'、 'acl' => AmazonS3 :: ACL_PUBLIC));を使用します。
Sunil Gulabani 2013年

回答:


52
$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
    ));

4
'ContentType' => 'image / jpeg'をありがとう、// <-これが必要なものです!
Alvin Chettiar 2018年

2
'ContentTypeを' => '画像/ JPEG'、敷居ダウンロードブラウザにURLの代わりに、diplay
insivika

51

Content-Typeを変更する必要があります。S3コンソールから、オブジェクトを右クリックして[プロパティ]を選択すると、[メタデータ]の下にあります。プログラムで行うこともできます:http//docs.amazonwebservices.com/AWSSDKforPHP/latest/index.html#m=AmazonS3/change_content_type


1
以前は$ s3-> putObjectFile($ tmp、$ bucket、$ actual_image_name、S3 :: ACL_PUBLIC_READ)を使用していましたが、何らかの理由で、バケットポリシーを使用して達成したいのと同じことを思い出しました
Cl '

1
@Cl 'メソッドでcontent-typeを設定putObject()することもできます(putObjectFile()現在のレガシーのように)。
mathielo 2014

14

添付ファイルの代わりにインラインのコンテンツ処理も指定する必要があります。

$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
));

3
これは私のために働いた。このコードを任意のタイプのファイルで機能させたい場合は、必ず 'ContentType' => mime_content_type($ file)
Cary

9

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

2

これを試すことができます。ブラウザですでにURLを開いている場合は、ContentTypeをブラウザで開く必要があります。その後、シークレットモードで試してください。

var params = {
            Bucket: config.BUCKET_NAME,
            Key: fileName,
            ContentEncoding: 'base64',
            ContentDisposition: 'inline',
            ContentType: 'image/jpeg',
            Body: buf
        };

2

あなたはこれを試すことができます、これは私のために働きます。

const params = {
          Bucket: 'bucket-name',
          Body: file,
          ACL: 'public-read',
          ContentType: contentType,
          ContentEncoding: 'base64',
          ContentDisposition: 'attachment',
        };

phpのtmpからcontentTypeを取得できます。
クリッシュ

1

AWSS3コンソールからコンテンツタイプを変更することもできます。

ここに画像の説明を入力してください

次に、サイドポップアップが表示されます。これを使用して、手動で変更します。

ここに画像の説明を入力してください


1

空の値を渡すと、ContentTypeダウンロードせずにファイルが開くことがわかりました。

これは、あらゆる種類の拡張子のファイルをアップロードするときに実際に便利です。

$s3->putObject(
[
    'Bucket' => ..,
    'Key' => ..,
    'Body' => ..,
    'ContentType' => '', <---
    'ACL' => 'public-read',
]);

0

Java SDKを使用している人がこれに対する解決策を見つけている場合は、コンテンツタイプをObjectMetaDataに設定する必要があります。

ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentType("image/png");

s3client.putObject(new PutObjectRequest
    (bucketName, fileName + ".png", inputStream, 
     objectMetadata).withCannedAcl(CannedAccessControlList.PublicRead));

0

シークレットモードで開くと、それ以外は機能しますが、何らかの理由で機能しません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.