您的位置:首页 > 编程语言 > Java开发

Spring MVC实现文件下载

2016-07-14 20:03 615 查看
[b] 下载文件①[/b]

下载文件需要将byte数组还原成文件。

首先使用mybatis将数据库中的byte数组查出来,指定文件名(包括格式)。然后使用OutputStream将文件输入

@RequestMapping(value = "downPhotoById")

public void downPhotoByStudentId(String id, final HttpServletResponse response){

PhotoEntity entity = this.photoMapper.getPhotoEntityByPhotoId(id);

byte[] data = entity.getPhotoData();

String fileName = entity.getFileName()== null ? "照片.png" : entity.getFileName();

fileName = URLEncoder.encode(fileName, "UTF-8");

response.reset();

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

response.addHeader("Content-Length", "" + data.length);

response.setContentType("application/octet-stream;charset=UTF-8");

OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());

outputStream.write(data);

outputStream.flush();

outputStream.close();

}

<a href="<%=request.getContextPath() %>/downPhotoById.do?id=8000001">下载照片</a>

[b] 下载文件②[/b]

[b]/** * @Description 下载文件 [/b]

[b]* @author jxldjsn[/b]

[b]* @date 2015年12月11日 下午6:11:33 [/b]

[b]* @param fileName [/b]

[b]* @param file [/b]

[b]* @return [/b]

[b]* @throws IOException [/b]

[b]*/ [/b]

[b]public ResponseEntity<byte[]> download(String fileName, File file) throws IOException {[/b]

[b] String dfileName = new String(fileName.getBytes("gb2312"), "iso8859-1");[/b]

[b] HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.setContentDispositionFormData("attachment", dfileName); [/b]

[b]return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED); }

[/b]

[b][b] 下载文件③[/b][/b]

//文件下载 主要方法
public static void download(HttpServletRequest request,
HttpServletResponse response, String storeName, String contentType
) throws Exception {

request.setCharacterEncoding("UTF-8");
BufferedInputStream bis = null;
BufferedOutputStream bos = null;

//获取项目根目录
String ctxPath = request.getSession().getServletContext()
.getRealPath("");

//获取下载文件露肩
String downLoadPath = ctxPath+"/uploadFile/"+ storeName;

//获取文件的长度
long fileLength = new File(downLoadPath).length();

//设置文件输出类型
response.setContentType("application/octet-stream");
response.setHeader("Content-disposition", "attachment; filename="
+ new String(storeName.getBytes("utf-8"), "ISO8859-1"));
//设置输出长度
response.setHeader("Content-Length", String.valueOf(fileLength));
//获取输入流
bis = new BufferedInputStream(new FileInputStream(downLoadPath));
//输出流
bos = new BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[2048];
int bytesRead;
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}
//关闭流
bis.close();
bos.close();
}

}

下载直接访问控制器如:http:\\localhost:8080/springmvc/download.do

[b] 下载文件④[/b]

@RequestMapping("/export")

public ResponseEntity<byte[]> export() throws IOException {

HttpHeaders headers = new HttpHeaders();

headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);

headers.setContentDispositionFormData("attachment", "dict.txt");

return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(new File("C:/Users/Administrator/Desktop/a.txt")),

headers, HttpStatus.CREATED);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: