栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot设置虚拟文件路径 及上传文件 下载文件

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot设置虚拟文件路径 及上传文件 下载文件

一、spingboot 设置虚拟文件路径及拦截类

LoginInterceptor 类  参考就可以  里面我写了业务逻辑 包含了JWTUtil 校验了  不要参考我的代码了
@Component
public class LoginInterceptor implements HandlerInterceptor {


	@Autowired
	private PlatFormRoleAuthService platFormRoleAuthService;


	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object o, Exception arg3)
			throws Exception {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
			throws Exception {
		// TODO Auto-generated method stub
		
	}

	
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

		//获取请求的RUi:去除http:localhost:8080这部分剩下的
		String uri = request.getRequestURI();


		if (HttpMethod.OPTIONS.toString().equals(request.getMethod()) || uri.contains("controllerTypeFile")|| uri.contains("ico")) {
			return true;
		} else {

			String platFormUserId = request.getHeader("platformuserid");
			String userId = request.getHeader("userid");
			//System.out.println("传递的参数id:" + platFormUserId);
			//System.out.println("传递的参数id2:" + userId);
			//System.out.println("传递的方法:" + uri);


			String token = request.getHeader("token");




			//验证token是否存在
			if (token != null && token != "" && (platFormUserId != null || userId != null)) {

				//System.out.println("接收的token" + token);
				//获取token中的userId
				Integer jwtUserId = JwtUtil.getAppUID(token);
				//System.out.println("获取的userId:" + jwtUserId);
				//System.out.println(platFormUserId !=null);


				 if (null!=platFormUserId &&jwtUserId.toString() == platFormUserId || jwtUserId.toString().equals(platFormUserId)) {
					if (uri.indexOf("/mg/") >= 0) {


						//查询数据库 校验权限
						String authFlag = platFormRoleAuthService.selectAuthFlagByUserIdAndAuthMethod(platFormUserId,uri);
						//System.out.println("authFlag:"+authFlag);
						if(authFlag!=null &&(authFlag=="1" || authFlag.equals("1"))){
							//System.out.println("认证成功");
							response.setHeader("Access-Control-Allow-Origin", "*");
							return true;
						}else{
							//System.out.println("认证失败1.1");
							response.setHeader("Access-Control-Allow-Origin", "*");
							response.getWriter().write("40000");
							return false;
						}
						

					} else {
						System.out.println("认证失败1");
						response.setHeader("Access-Control-Allow-Origin", "*");
						response.getWriter().write("50000");
						return false;
					}
				} else if (null!=userId  &&jwtUserId.toString() == userId || jwtUserId.toString().equals(userId)) {
					if (uri.indexOf("/user/") >= 0) {




						//System.out.println("认证成功");
						response.setHeader("Access-Control-Allow-Origin", "*");
						return true;
					} else {
						System.out.println("认证失败2");
						response.setHeader("Access-Control-Allow-Origin", "*");
						response.getWriter().write("50000");
						return false;
					}
				} else {
					System.out.println("认证失败3");
					response.setHeader("Access-Control-Allow-Origin", "*");
					response.getWriter().write("50000");
					return false;
				}
			} else{
				System.out.println("认证失败4,token为空");

				System.out.println("token:"+token);
				System.out.println("platFormUserId:"+platFormUserId);
				System.out.println("userId:"+userId);

				System.out.println("uri:"+uri);

				response.setHeader("Access-Control-Allow-Origin", "*");
				response.getWriter().write("50000");
				return false;
			}


		}
	}
}

//注册拦截器
@Configuration
public class WebAppConfig implements WebMvcConfigurer {


    @Bean
    public  LoginInterceptor getLoginInterceptor(){
        return new LoginInterceptor();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //注册自己的拦截器并设置拦截的请求路径 拦截的目的是校验请求地址的token值是否合法 可以不做拦截
        registry.addInterceptor(getLoginInterceptor()).addPathPatterns("/查询
            UUID uuid = UUID.randomUUID();
            int lastIndexOf = fileName.lastIndexOf(".");
            //获取文件的后缀名 .jpg
            String suffix = fileName.substring(lastIndexOf);
            String newFileName = uuid.toString()+suffix;*/
            File uploadFile = new File(filePath+fileName);
            //不存在目录 创建

            File file11 =new File(filePath);
            if(!file11.exists()&& !file11 .isDirectory()){
                file11.mkdirs();
            }

            try {
                file.transferTo(uploadFile);
                msg = new MsgStatus("success","文件上传成功",fileName);

            } catch (IOException e) {
                msg = new MsgStatus("error","文件上传失败,服务器故障");
            }


        }else {
            msg = new MsgStatus("error","文件不能为空");

        }
        response.setHeader("Access-Control-Allow-Origin", "*");
        return msg;

    }


    //下载文件
    @RequestMapping(value = "/dd/downControllerFile")
    public void downControllerFile(String fileName){
        response.setCharacterEncoding(request.getCharacterEncoding());
        response.setContentType("application/octet-stream");
        ServletOutputStream outputStream = null;
        FileInputStream inputStream = null;
        try {
            //接受文件名,读取磁盘对应的文件,创建输入流对象
            inputStream = new FileInputStream(filePath+fileName);
            //2.获取响应对象的输出流
            outputStream = response.getOutputStream();

            //3.文件下载文件名的编码使用ISO-08859-1编码
            //我们需要将我们UTF-8的 filename转换ISO-8859-1编码
            //3.1先将字符串以UTF-8转换成字节数组
            byte[] bytes = fileName.getBytes("UTF-8");
            //3.2再将字节数组以 ISO-8859-1转换字符串
            fileName = new String(bytes, "ISO-8859-1");
            //4.响应的内容应该是以附件的形式响应给浏览器(设置响应头)
            response.setHeader("Content-Disposition", "attachment;filename="+fileName);
            //5.响应文件给浏览器
            IOUtils.copy(inputStream, outputStream);
            //刷新及关闭连接
            response.flushBuffer();
            inputStream.close();
            outputStream.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }


}

baseController

public class baseController implements ServletContextAware {

    protected HttpServletRequest request;
    protected HttpServletResponse response;
    protected HttpSession session;
    protected ServletContext servletContext;
    @ModelAttribute
    public void setReqAndRes(HttpServletRequest request, HttpServletResponse response){
        this.request = request;
        this.response = response;
        this.session = request.getSession();
    }


    @Override
    public void setServletContext(ServletContext servletContext) {
        this.servletContext = servletContext;

    }

}

其实还有一种方法 ,如果不做权限检验,下载文件 可以尝试用网络地址直接访问 ,不用通过controller,不过多次尝试发现有一个问题,中文的文件名会报错,英文的没有问题,之前用springmvc 设置tomcat虚拟路径 一直不存在文件名问题 ,搞不懂springboot 为什么会这样

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/678054.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号