Amazon web services AWS S3以内联方式显示文件,而不是强制下载
由于某些原因,我的S3存储桶中的文件被强制下载,而不是在线显示。因此,如果我复制一个图像链接并将其粘贴到地址栏中,然后导航到地址栏,它将促使我的浏览器下载它。相反,我实际上必须点击打开的图像才能转到urlAmazon web services AWS S3以内联方式显示文件,而不是强制下载,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,由于某些原因,我的S3存储桶中的文件被强制下载,而不是在线显示。因此,如果我复制一个图像链接并将其粘贴到地址栏中,然后导航到地址栏,它将促使我的浏览器下载它。相反,我实际上必须点击打开的图像才能转到url 要更改从S3提供文件的方式,您需要更改内容类型。在S3控制台中,右键单击对象并选择Properties,然后它位于Metadata下。您还可以通过编程方式执行此操作:$client->putObject(数组)( “Bucket”=>“buckname”, “Key”=>$destinatio
要更改从S3提供文件的方式,您需要更改内容类型。在S3控制台中,右键单击对象并选择Properties,然后它位于Metadata下。您还可以通过编程方式执行此操作:
$client->putObject(数组)(
“Bucket”=>“buckname”,
“Key”=>$destination,
'SourceFile'=>$source,
“ContentType”=>“image/jpeg”,//“public read”//您还需要为内联附件指定内容配置
$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
));
$client->putObject(数组)(
“Bucket”=>“buckname”,
“Key”=>$destination,
'SourceFile'=>$source,
“ContentType”=>“image/jpeg”、//“inline;filename=filename.jpg”、//“public read”//如果您使用的是python,则可以设置
您也可以在aws cli中实现同样的功能。注意*.jpeg
检查文档
aws s3 cp \
--exclude "*" \
--include "*.jpeg" \
--content-type="image/jpeg" \
--metadata-directive="REPLACE" \
--recursive \
--dryrun \
s3://<bucket>/<path>/ \
s3://<bucket>/<path>/
aws s3 cp\
--排除“*”\
--包括“*.jpeg”\
--content type=“图像/jpeg”\
--元数据指令=“替换”\
--递归的\
--干跑步\
s3:///\
s3:////
或者,如果您希望一次修改一个对象,您可能希望使用
aws s3api复制对象\
--content type=“图像/jpeg”\
--元数据指令=“替换”\
--复制源“/”\
--桶“\
--键“”\
--acl公共读取
您可以尝试此选项,ContentType对于在浏览器中打开是必需的。如果您已经在浏览器上打开了任何URL,请尝试匿名
var params = {
Bucket: config.BUCKET_NAME,
Key: fileName,
ContentEncoding: 'base64',
ContentDisposition: 'inline',
ContentType: 'image/jpeg',
Body: buf
};
如果使用JavaSDK的人正在寻找解决方案,您需要将内容类型设置为ObjectMetaData
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentType("image/png");
s3client.putObject(new PutObjectRequest
(bucketName, fileName + ".png", inputStream,
objectMetadata).withCannedAcl(CannedAccessControlList.PublicRead));
你可以试试这个,这个适合我
const params = {
Bucket: 'bucket-name',
Body: file,
ACL: 'public-read',
ContentType: contentType,
ContentEncoding: 'base64',
ContentDisposition: 'attachment',
};
您也可以从AWS S3控制台更改内容类型
然后你会看到侧面弹出,用它来手动改变它
我发现,如果我们将空值传递给ContentType
,它将打开文件而不是下载
当上传各种扩展名的文件时,这实际上很好
$s3->putObject(
[
'Bucket' => ..,
'Key' => ..,
'Body' => ..,
'ContentType' => '', <---
'ACL' => 'public-read',
]);
$s3->putObject(
[
“Bucket”=>。。,
“键”=>。。,
“主体”=>。。,
'内容类型'=>'','公共读取',
]);
如果你以匿名方式打开它,它将正常工作,而不是因为某种原因无法正常工作。复制图像链接时,它直接指向图像URL。浏览器只需执行提供的URL即可。@SunilGulabani但我看到过使用amazon s3的网站,这些网站允许你直接访问文件,而无需强制下载文件。例如,图像托管站点允许直接访问图像。我指的是直接文件路径。这里是一个示例,这是一个托管在我的S3存储桶中的文件:我认为您提供的内容类型在上载图像时会出错。它需要为image/jpeg。检查内容类型:@SunilGulabani我不向S3发送任何关于MI的数据我只是简单地:$s3->putObjectFile($tmp,$bucket,$actual_image_name,s3::ACL_PUBLIC_READ)和wholaUse$s3->create_object($bucket,$file_name,array('contentType'=>'image/jpeg','ACL'=>AmazonS3::ACL_PUBLIC));我明白了,我在使用$s3->putObjectFile($tmp,$bucket,$actual_image_name,s3::ACL_PUBLIC_READ)以前,但由于某种原因,我记得我做了同样的事情,我想通过使用bucket来实现policy@Cl'您也可以(因为putObjectFile()
现在是遗留的)。感谢您提供的“ContentType”=>“image/jpeg”、//“ContentType”=>“image/jpeg”,sill将下载url,而不是直接播放browser@insivika尝试在匿名浏览器中打开。我遇到了同样的问题,当我以匿名模式打开时,它对我有效。这对我有效。对于那些希望使此代码与任何类型的文件一起工作的人,请确保使用“Cont”entType'=>mime\u content\u type($file)您可以在php中从tmp获取contentType。我在python中也遇到了同样的问题,添加了“bucket.put\u对象(Key=Key,Body=strdata,ACL='public-read',contentType='text/html'),它成功了。
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentType("image/png");
s3client.putObject(new PutObjectRequest
(bucketName, fileName + ".png", inputStream,
objectMetadata).withCannedAcl(CannedAccessControlList.PublicRead));
const params = {
Bucket: 'bucket-name',
Body: file,
ACL: 'public-read',
ContentType: contentType,
ContentEncoding: 'base64',
ContentDisposition: 'attachment',
};
$s3->putObject(
[
'Bucket' => ..,
'Key' => ..,
'Body' => ..,
'ContentType' => '', <---
'ACL' => 'public-read',
]);