直接用url访问静态文件 和 访问url获取 server读取文件后返回的数据流 有啥区别

最近项目要求用户在浏览器里面 访问pdf文件,可以支持直接预览。

有时候返回的事静态文件地址,chrome默认用自己的pdf预览插件,就能打开,不如 embed 或者 iframe插入下即可。

但是还有另外情况:后台会返回文件数据流,这个时候再用iframe 和 embed就会直接下载,并不能在浏览器中预览。后来找到了pdf.js 这个插件可以实现。总之功能是解决了。

不过,还是不清楚这其中的区别,感觉访问静态文件也是访问文件流啊,难道不一样的数据形式吗?

没有读过很深的计算机知识,也不知道用什么关键词查询,求大神解答下。谢谢🙏

最佳答案

一般来说浏览器会根据返回的http中的header来判断文件类型,即

    content-type: image/gif

查看 nginx一下的配置文件

$grep pdf /etc/nginx/mime.types
    application/pdf                       pdf;

可见 pdf 对应的mime类型是 application/pdf, 即如果nginx 返回 content-type: application/pdf则浏览器会启动插件直接浏览。

为了让浏览器能提供下载功能,而不是直接查看,一般故意设成其它类型,如

location /download/abc.pdf {
    default_type application/octet-stream;  
    root /download ;
}

这样通过这个链接便是下载了。
如果上面的不起作用,也可以试试

add_header Content-Type "application/octet-stream";