AWS上传文件设置MIME Content Type问题

最近发现上传到AWS S3服务器上的文件(PDF或者图片)有个问题,在浏览器粘贴资源地址,有的文件直接在浏览器里预览,有的则是直接下载的。用curl -I 查看了下不同文件的http响应头,显示的content type一种是application/otcet-stream(有的显示application/x-download),另一种则是application/pdf。OK,找到原因了,响应头里content type为application/otcet-stream或application/x-download的文件,浏览器直接当作文件流直接下载下来,content type为application/pdf的文件,如果浏览器设置了pdf预览,则以预览形式打开。

检查了下自己写的上传文件的代码,发现并没有显示设置content type的值,会不会是由于没有设置content type导致S3服务器分配了个默认的类型。测试了下,随意上传了个pdf,结果S3服务器上显示的http响应头里, content type显示是application/pdf,看来有可能是aws java sdk帮忙做了这件事。

一步步跟进代码,发现的确是sdk帮忙设置了content type,代码片段见com.amazonaws.services.s3.AmazonS3Client类的public PutObjectResult putObject(PutObjectRequest putObjectRequest) 方法

public PutObjectResult putObject(PutObjectRequest putObjectRequest) throws Amazon
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为UTF-8的方法是什么? 您可以使用以下Java代码将文件上传到AWS S3,并设置文件编码为UTF-8: ```java import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.nio.charset.StandardCharsets; import com.amazonaws.AmazonServiceException; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.ObjectMetadata; import com.amazonaws.services.s3.model.PutObjectRequest; public class S3Uploader { private static final String BUCKET_NAME = "your-bucket-name"; private static final String ACCESS_KEY = "your-access-key"; private static final String SECRET_KEY = "your-secret-key"; public static void main(String[] args) { BasicAWSCredentials awsCreds = new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY); AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new AWSStaticCredentialsProvider(awsCreds)) .withRegion(Regions.DEFAULT_REGION) .build(); String filePath = "path/to/your/file.txt"; String keyName = "your-file-name.txt"; File file = new File(filePath); try (InputStream inputStream = new FileInputStream(file)) { ObjectMetadata objectMetadata = new ObjectMetadata(); objectMetadata.setContentEncoding(StandardCharsets.UTF_8.toString()); objectMetadata.setContentType("text/plain"); objectMetadata.setContentLength(file.length()); PutObjectRequest request = new PutObjectRequest(BUCKET_NAME, keyName, inputStream, objectMetadata); s3Client.putObject(request); } catch (AmazonServiceException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } } ``` 在这个例子中,我们使用AWS SDK for Java V2将一个文件上传到AWS S3设置文件编码为UTF-8,并设置文件的Content-Type为"text/plain"。您可以在ObjectMetadata对象中设置其他自定义元数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值