java 文件下载预览_javaweb简单的实现文件下载及预览
@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简单的实现文件下载及预览相关推荐
- android 摄像头比例,Android摄像头是全屏预览最简单的方式.doc
Android摄像头是全屏预览最简单的方式 Android Camera做全屏预览之最简单方法 M厂开发五部:刘 博 一.全屏预览与非全屏预览的区别 对于大多数人来说,我们看电影.玩游戏等都喜欢全屏, ...
- ajax图片预览,Ajax 上传图片并预览的简单实现
1. 直接上最简单的 一种 ajax 异步上传图片,并预览 html: 图片上传 | cookie file: desc: function upload() { $.ajaxFileUpload({ ...
- ofd能在线播放吗 linux,看到OFD格式就头大?OFD在线预览很简单
原标题:看到OFD格式就头大?OFD在线预览很简单 OFD格式是什么?OFD格式在办公中并不算常见,但一旦遇到,OFD格式怎么打开预览让不少人头大.OFD是国内电子文档归档的标准格式,通俗来说,就类似 ...
- 海康威视摄像机Java SDK拉流(二)开启关闭实时预览
上一篇:海康威视Java SDK拉流(一)初始化SDK 本篇介绍海康威视摄像机通过SDK开启关闭实时预览接口 下篇介绍实时预览的回调函数及解码库 测试环境: 系统:Centos 7 SDK:设备网络S ...
- Camera2预览流程简单附demo
根据这个流程图配合代码很好理解 package com.example.camera2;import androidx.annotation.NonNull; import androidx.appc ...
- Android 视频 短视频录制预览尺寸(简单几款机型测试)
Android 视频 短视频录制预览尺寸(简单几款机型测试) 贴出下列2表目的也是便于大家对一般相机照片和预览主流尺寸有个大概了解 SurfaceView 照片支持尺寸 Picture Nexus 5 ...
- 关于Java项目中,word和Excel类型文件的预览功能实现
关于Java项目中,word和Excel类型文件的预览功能实现 背景 Aspose说明 Aspose.Words Aspose.Cells pom依赖引入 引入license.xml(授权文件) 创建 ...
- java 简单的word文件下载
文件下载 结合网上一些博客修改的 具体哪些太久了,记不清了 package com.cj.core.utils.download;import lombok.extern.slf4j.Slf4j;im ...
- 微信小程序文件下载预览 真机调试可以 但直接预览打不开 小程序文件下载 小程序文件预览
只要确保真机调试和调试状态下可以下载并预览文件即可,上线后即可预览成功 文件预览代码: 小程序预览的前提需要先调用下载接口,下方代码未处理下载和预览失败事件哟,此处我使用的是uniapp框架,如果使用 ...
最新文章
- beego07----web博客
- oracle 频繁io,Oracle IO问题解析
- 实例分析objdump反汇编用法
- Linux下的parted工具的使用 GPT分区安装系统
- 运行Deeplab遇到‘Unexpected label’
- Python:程序设计方法学、体育竞技分析
- java spring orm jbpm_spring整合jbpm4
- mysql ibd frm文件_Mariadb,Mysql如何根据.frm和.ibd文件来恢复数据和表结构
- DevExpress 表中数据导出
- Unity Plugins的使用方法
- 中英文国家名及手机号码前缀
- 2018南京航天航空大学820自动控制原理参考答案
- mysql怎么解析json字符串_mysql解析json字符串
- CalBioreagents丨艾美捷丨ACTH N端单克隆抗体
- 基于深度学习智能问答笔记
- 一文讲透,商业智能BI的未来形态,发展现状及前景分析|推荐收藏
- 傻妞sillyGirl对接VLW微信机器人
- Matlab常用数学函数和数学运算符
- Web安全工具大集合
- 计算机信息采集方式有哪些,数据监控都有哪些信息采集渠道
热门文章
- numpy 常用api(一)
- usd to php exchange,999500 USD to PHP Currency Converter - 美元 菲律宾比索 汇率兑换
- via浏览器下载路径_Via安卓浏览器(软件篇)
- 电脑安装python-如何安装python
- python基础知识-Python基础知识
- 一张图学会python3语法-一张图片在Python操作下的4种玩法(附源码)
- php获取用户当前坐标,web端定位:获取当前地理位置
- www.yaxjf.com+m.php,linux运维架构--PHP开发-零基础学习PHP视频教程
- 查看某个属性在所有浏览器的兼容性
- ant a-table 表格数据同步