跨域访问或者下载图片、 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 在请求中对结果有什么决定性的影响吗?
推荐文章: