@ResponseBody

@RequestMapping(value="/downloadFile")public void downloadFile(HttpServletRequest request, HttpServletResponse response) throwsException{//解决乱码问题

String path = request.getParameter("path");

String fileName= request.getParameter("fileName");

path=MyUtils.isRandomCode(path);

fileName=MyUtils.isRandomCode(fileName);try{

String filePath= path+fileName;//高速浏览器以附件形式下载//不同浏览器的编码不同,对中文进行编码,下载时输出名称是文件名

response.setHeader("Content-Disposition","attachment;filename="+fileName);//获取文件的mimetype,如123.txt,他的mimetype就是 txt ,下载时,就以 txt 格式下载

String mimeType = fileName.substring(fileName.lastIndexOf(".") + 1); //获取文件后缀,比如是 txt 文件,就是以txt格式下载//设置响应的 mimetype

response.setContentType(mimeType);//获取response 输出流,用来输出文件

ServletOutputStream out =response.getOutputStream();//接下来进行读取,以输入流的形式读取

FileInputStream in = newFileInputStream(filePath);byte[] buffer = new byte[1024];int len = 0;while ((len=in.read(buffer))!=-1){

out.write(buffer,0,len);

}

in.close();

}catch(Exception e) {

System.out.println("下载错误!");

}

}

这里有一个工具类,就是前端传过来的参数有可能会乱码,所以要判断一下是否乱码,有乱码的话就处理一下

packagecom.zhouhe.modules.api.util;importjava.io.UnsupportedEncodingException;/*** 自定义工具类

* @Author zhouhe

* @Date 2019/11/15 11:54*/

public classMyUtils {/*** 判断是否是乱码,乱码的话进行处理,不乱码直接返回

*@paramcode

*@return

*/

public static String isRandomCode(String code) throwsUnsupportedEncodingException {if (!XUtil.isEmpty(code)) {//判断是乱码 (GBK包含全部中文字符;UTF-8则包含全世界所有国家需要用到的字符。)

if (!(java.nio.charset.Charset.forName("GBK").newEncoder().canEncode(code))) {

code= new String(code.getBytes("ISO-8859-1"), "utf-8"); //转码UTF8

}

}returncode;

}

}

前端可以使用 window.location.href=请求路径,比如:

注意:

不能使用ajax请求后台下载文件,否则会有问题:

ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的。文件的下载是以二进制形式进行的,ajax没法解析后台返回的文件流,所以无法处理二进制流response输出来下载文件,可以在浏览器中的network里面查看访问的地址,找到response一栏就看见 后台返回的数据:

解决方法:

文件直接下载(不需要传递参数),可以使用 < a href="/media">点击下载Excel < /a>

前端需要传递参数(如excel),可以在绑定方法里面 window.location.href=url

文件预览:

public void downLoad(String filePath, HttpServletResponse response, boolean isOnLine) throwsException {

File f= newFile(filePath);if (!f.exists()) {

response.sendError(404, "File not found!");return;

}

BufferedInputStream br= new BufferedInputStream(newFileInputStream(f));byte[] buf = new byte[1024];int len = 0;

response.reset();//非常重要

if (isOnLine) { //在线打开方式

URL u = new URL("file:///" +filePath);

response.setContentType(u.openConnection().getContentType());

response.setHeader("Content-Disposition", "inline; filename=" +f.getName());//文件名应该编码成UTF-8

} else { //纯下载方式

response.setContentType("application/x-msdownload");

response.setHeader("Content-Disposition", "attachment; filename=" +f.getName());

}

OutputStream out=response.getOutputStream();while ((len = br.read(buf)) > 0)

out.write(buf,0, len);

br.close();

out.close();

}

要注意在路径前加了file:///,否则会报错 java.net.MalformedURLException: unknown protocol: e

还有一点就是中文下载或者带空格的话可能会有问题,会出现中文乱码或者变成___,而空格会被截断,处理方式如下:

response.setHeader("Content-Disposition","attachment;filename="+fileName);

换成

response.setHeader("Content-Disposition","attachment; filename=\"" + new String(fileName.getBytes("gb2312"),"ISO-8859-1") + "\"");

java 文件下载预览_javaweb简单的实现文件下载及预览相关推荐

  1. android 摄像头比例,Android摄像头是全屏预览最简单的方式.doc

    Android摄像头是全屏预览最简单的方式 Android Camera做全屏预览之最简单方法 M厂开发五部:刘 博 一.全屏预览与非全屏预览的区别 对于大多数人来说,我们看电影.玩游戏等都喜欢全屏, ...

  2. ajax图片预览,Ajax 上传图片并预览的简单实现

    1. 直接上最简单的 一种 ajax 异步上传图片,并预览 html: 图片上传 | cookie file: desc: function upload() { $.ajaxFileUpload({ ...

  3. ofd能在线播放吗 linux,看到OFD格式就头大?OFD在线预览很简单

    原标题:看到OFD格式就头大?OFD在线预览很简单 OFD格式是什么?OFD格式在办公中并不算常见,但一旦遇到,OFD格式怎么打开预览让不少人头大.OFD是国内电子文档归档的标准格式,通俗来说,就类似 ...

  4. 海康威视摄像机Java SDK拉流(二)开启关闭实时预览

    上一篇:海康威视Java SDK拉流(一)初始化SDK 本篇介绍海康威视摄像机通过SDK开启关闭实时预览接口 下篇介绍实时预览的回调函数及解码库 测试环境: 系统:Centos 7 SDK:设备网络S ...

  5. Camera2预览流程简单附demo

    根据这个流程图配合代码很好理解 package com.example.camera2;import androidx.annotation.NonNull; import androidx.appc ...

  6. Android 视频 短视频录制预览尺寸(简单几款机型测试)

    Android 视频 短视频录制预览尺寸(简单几款机型测试) 贴出下列2表目的也是便于大家对一般相机照片和预览主流尺寸有个大概了解 SurfaceView 照片支持尺寸 Picture Nexus 5 ...

  7. 关于Java项目中,word和Excel类型文件的预览功能实现

    关于Java项目中,word和Excel类型文件的预览功能实现 背景 Aspose说明 Aspose.Words Aspose.Cells pom依赖引入 引入license.xml(授权文件) 创建 ...

  8. java 简单的word文件下载

    文件下载 结合网上一些博客修改的 具体哪些太久了,记不清了 package com.cj.core.utils.download;import lombok.extern.slf4j.Slf4j;im ...

  9. 微信小程序文件下载预览 真机调试可以 但直接预览打不开 小程序文件下载 小程序文件预览

    只要确保真机调试和调试状态下可以下载并预览文件即可,上线后即可预览成功 文件预览代码: 小程序预览的前提需要先调用下载接口,下方代码未处理下载和预览失败事件哟,此处我使用的是uniapp框架,如果使用 ...

最新文章

  1. beego07----web博客
  2. oracle 频繁io,Oracle IO问题解析
  3. 实例分析objdump反汇编用法
  4. Linux下的parted工具的使用 GPT分区安装系统
  5. 运行Deeplab遇到‘Unexpected label’
  6. Python:程序设计方法学、体育竞技分析
  7. java spring orm jbpm_spring整合jbpm4
  8. mysql ibd frm文件_Mariadb,Mysql如何根据.frm和.ibd文件来恢复数据和表结构
  9. DevExpress 表中数据导出
  10. Unity Plugins的使用方法
  11. 中英文国家名及手机号码前缀
  12. 2018南京航天航空大学820自动控制原理参考答案
  13. mysql怎么解析json字符串_mysql解析json字符串
  14. CalBioreagents丨艾美捷丨ACTH N端单克隆抗体
  15. 基于深度学习智能问答笔记
  16. 一文讲透,商业智能BI的未来形态,发展现状及前景分析|推荐收藏
  17. 傻妞sillyGirl对接VLW微信机器人
  18. Matlab常用数学函数和数学运算符
  19. Web安全工具大集合
  20. 计算机信息采集方式有哪些,数据监控都有哪些信息采集渠道

热门文章

  1. numpy 常用api(一)
  2. usd to php exchange,999500 USD to PHP Currency Converter - 美元 菲律宾比索 汇率兑换
  3. via浏览器下载路径_Via安卓浏览器(软件篇)
  4. 电脑安装python-如何安装python
  5. python基础知识-Python基础知识
  6. 一张图学会python3语法-一张图片在Python操作下的4种玩法(附源码)
  7. php获取用户当前坐标,web端定位:获取当前地理位置
  8. www.yaxjf.com+m.php,linux运维架构--PHP开发-零基础学习PHP视频教程
  9. 查看某个属性在所有浏览器的兼容性
  10. ant a-table 表格数据同步