java中文件上传和下载是比较常用的功能,今天在项目中也有用的,就整理下拿出来分享下
1、逻辑
将文件流写入到response的流中,设置response的setContentType和addHeader为流下载即可
2、代码
@RequestMapping("FileDownLoad.do")
@ResponseBody
public void FileDownLoad(HttpServletRequest request, HttpServletResponse response)
throws UnsupportedEncodingException {
String zbGuid = request.getParameter("zbGuid");
if(zbGuid == ""){
return;
}
Object[] fileObj = FileCommonUtil.getFileByZBGUID(zbGuid, genericDao);
String fileName = FileCommonUtil.getFileNameNoEx(((File) fileObj[0]).getName());
File file = (File) fileObj[0];
response.setContentType("application/x-download");
response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
FileCommonUtil.writeFileToResponse(response, file);
}
工具类代码
public static void writeFileToResponse(HttpServletResponse response, File file){
OutputStream outp = null;
FileInputStream in = null;
try {
outp = response.getOutputStream();
in = new FileInputStream(file);
byte[] b = new byte[1024];
int i = 0;
while ((i = in.read(b)) > 0) {
outp.write(b, 0, i);
}
outp.flush();
} catch (Exception e) {
} finally {
if (in != null) {
try {
in.close();
in = null;
} catch (IOException e) {
e.printStackTrace();
}
if (outp != null) {
try {
outp.close();
outp = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}