s3中pdf文件预览和下载的设置

应用场景

使用学校的s3服务,需要控制文件在浏览器中是预览还是下载。

背景知识

通过url访问到的每一个文件,都会返回一个Content-Type,也就是所谓的MIME 类型(媒体类型)

MIME 类型 代表含义 浏览器默认行为
application/pdf 这是一个 PDF 文件 使用内置 PDF 查看器打开
application/octet-stream 这是一个“任意二进制流”(不明确的文件类型) 浏览器通常会提示下载而不是打开

解决方案

如果需要默认行为是预览,就设置媒体类型为application/pdf
如果需要默认行为是下载,就不设置媒体类型,默认的媒体类型就是application/octet-stream

代码示例

我用的golang的示例

1
2
3
4
5
6
_, err = svc.PutObject(&s3.PutObjectInput{
Bucket: aws.String(bucket),
Key: aws.String(objectKey),
Body: file,
ContentType: aws.String("application/pdf"),
})

文件示例

预览PDF文件测试

下载PDF文件测试

原理图例

可以看到预览PDF中的Content-type是application/pdf
图片

可以看到下载PDF中的Content-type是application/octet-stream
图片