解决前后端分离通过url下载文件而不是打开文件问题(nginx)

  1. 网上找了很多资料,基本都是copy的。我的项目是前后端分离的,然后图片是存在本地的。
  2. 前端js的下载方法
//这里的name和url也可以自己传进来
function downLoadFile(file_url) {
    var url = file_url;
    var name = file_url.substring(file_url.lastIndexOf("/") + 1);
    var download = async () => {
        let responsePromise = await fetch(url);
        let blob = await responsePromise.blob();
        let objectURL = window.URL.createObjectURL(blob);
        let a = document.createElement('a');
        a.href = objectURL;
        a.download = name;
        a.click();
        a.remove();
    };
    download().then(r => {
        console.log(r);
    });
}
  1. 如果出现跨域问题的话
    1、单个控制器方法CORS注解
@RestController
@RequestMapping("/system/test")
public class TestController {

    @CrossOrigin
    @GetMapping("/{id}")
    public AjaxResult getUser(@PathVariable Integer userId) {
        // ...
    }
	
	@DeleteMapping("/{userId}")
    public AjaxResult delete(@PathVariable Integer userId) {
        // ...
    }
}

2、整个控制器启用CORS注解

@CrossOrigin(origins = "http://ruoyi.vip", maxAge = 3600)
@RestController
@RequestMapping("/system/test")
public class TestController {

    @GetMapping("/{id}")
    public AjaxResult getUser(@PathVariable Integer userId) {
        // ...
    }
	
	@DeleteMapping("/{userId}")
    public AjaxResult delete(@PathVariable Integer userId) {
        // ...
    }
}

3、全局CORS配置(在ResourcesConfig重写addCorsMappings方法)

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 通用配置
 *
 * @author GideonYeung
 */
@Configuration
public class ResourcesConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry)
    {
        // 设置允许跨域的路径
        //TODO 因为我的文件地址是这样的http://127.0.0.1/gidoen/upload/gideon.jpg,所有我写成了这样,或者写成/**也可以
        registry.addMapping("/upload/**")
                // 设置允许跨域请求的域名
                .allowedOrigins("*")
                // 是否允许证书
                .allowCredentials(true)
                // 设置允许的方法
                .allowedMethods("GET", "POST", "DELETE", "PUT")
                // 设置允许的header属性
                .allowedHeaders("*")
                // 跨域允许时间
                .maxAge(3600);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值