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

java文件下载以及服务器文件存储位置获取和存储位置

2017-02-04 00:00 411 查看
@RequestMapping("annlReadme2.html")
public String annlReadme2(ModelMap modelMap, HttpServletRequest request,HttpServletResponse response) {

String fileName="222.doc";
String showName="111.doc";

BufferedInputStream in = null;
BufferedOutputStream out = null;

String rootpath = request.getSession().getServletContext().getRealPath("/");
try {
showName=  new String(showName.getBytes("gb2312"), "ISO8859-1" );
File f = new File(rootpath + "/download/" + fileName);
response.setContentType("application/msword");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=" + showName);
response.setHeader("Content-Length", String.valueOf(f.length()));
in = new BufferedInputStream(new FileInputStream(f));
out = new BufferedOutputStream(response.getOutputStream());
byte[] data = new byte[1024];
int len = 0;
while (-1 != (len=in.read(data, 0, data.length))) {
out.write(data, 0, len);
}
} catch (Exception e) {
response.reset();
e.printStackTrace();
} finally {
try {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}catch (Exception e){
System.out.print(" error");
}
}
return null;
}

下面是文件的路径存放点



关键核心代码

String url = request.getSession().getServletContext().getRealPath("download/");

上面的获取到了文件存放的位置

OutputStream outputStream = null;
try {
File file = new File(bookRouteURL);//bookRoute文件路径
String fileName = file.getName();
//流形式下载文件
InputStream inputStream = new BufferedInputStream(new FileInputStream(bookRouteURL));//bookRoute文件路径
byte[] buffer = new byte[inputStream.available()];//返回可以读取的字节数的估计值
inputStream.read(buffer);
inputStream.close();

// 清空response
response.reset();
//根据浏览器类型选择转码
if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0){
fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");//firefox浏览器
} else {
fileName = URLEncoder.encode(fileName, "UTF-8");
}
//设置header
response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
response.addHeader("Content-Length", "" + file.length());
response.setContentType("application/octet-stream");//二进制流,不知道下载文件类型
outputStream = new BufferedOutputStream(response.getOutputStream());
outputStream.write(buffer);
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭流
if (outputStream != null){
try {
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息