어떤 이유로 내 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
첨부 대신 인라인에 대해서도 Content Disposition을 지정해야합니다.
$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
));
파이썬을 사용하는 경우 다음과 같이 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에서도 동일한 결과를 얻을 수 있습니다. 참고 s3 문서 *.jpeg
확인
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
이것을 시도해 볼 수 있습니다. ContentType은 브라우저에서 이미 URL을 연 다음 시크릿에서 시도하는 경우 브라우저에서 열어야합니다.
var params = {
Bucket: config.BUCKET_NAME,
Key: fileName,
ContentEncoding: 'base64',
ContentDisposition: 'inline',
ContentType: 'image/jpeg',
Body: buf
};
빈 값을 전달하면 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));