跨域访问或者下载图片、 word、 ppt文档
运行环境
Nginx 1.8.0
Laravel Framework 8.61.0
PHP 7.4.14 (cli)
跨域请求资源文件
前后端分离的项目,跨域请求使用了官方的 \Fruitcake\Cors\HandleCors 中间件,config/cors.php 已经配置,api接口请求正常
项目的nginx配置
location / {
index index.php;
try_files $uri $uri/ /index.php?$query_string;
}
在public目录下有两个目录提供访问的
public
--bgs
----bg1.png
----bg2.png
--docs
----doc1.docx
----doc2.docx
现在面临两个问题,业务场景:
- 前端合成图片需要的背景图,需要从服务器中下载
下载的时候出现跨域的问题// 前端代码 uni.downloadFile({ url:'http://test.com/bg/bg1.png' })
Access to XMLHttpRequest at 'http://test.com/bg/bg1.png' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource
我尝试了两种有效的方式
1.1 修改nginx的配置文件
location ~ .*\.(gif|jpg|jpeg|bpm|png)$ {
expires 30d;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
add_header Content-Disposition *;
error_log off;
access_log /dev/null;
}
1.2 添加路由,请求的url使用test.com/download?name=bg/bg1.png
Route::get('/download', function (Request $request) {
return Response::download($request::input('name'));
});
使用<img src=”http://test.com/bg/bg1.png"/> 前端正常显示
我的疑问是当直接下载 test.com/bg/bg1.png 下载时候是laravel响应造成的还是nginx配置中 try_files 影响了呢?
- 在线预览doc、ppt等ofice文件
使用的是微软提供的在线预览功能
https://view.officeapps.live.com/op/view.aspx?src=公网可访问的文件地址
这里我要访问public/docs/doc1.docx的文件,提交到服务器的时候,加载总是出现错误
但是直接访问就下载文件,能下载为什么不能预览?
外网地址 resume.magein.cn:7002/docs/doc1.do...
拼接后的预览地址 view.officeapps.live.com/op/view.a...
配置文件中的 try_files 在请求中对结果有什么决定性的影响吗?
访问静态资源,如图片使用nginx的配置
原因是nginx的配置文件 try_files 的作用,try_files会判断 $uri 是不是一个文件是的话直接返回,这个时候没有进入到laravel的路由里面,所以不存在laravel相关的任何问题,