java 远程下载服务器的文件 博客分类: java java
废话不多说,直接上代码:
public void downloadChineseFileByOutputStream(HttpServletRequest req,
HttpServletResponse response,@RequestParam("path") String path)
throws FileNotFoundException, IOException {
String realPath = path;//req.getSession().getServletContext().getRealPath(path);//获取要下载的文件的绝对路径
String fileName = realPath.substring(realPath.lastIndexOf("\\")+1);//获取要下载的文件名
String agent = req.getHeader("USER-AGENT").toLowerCase();
//根据浏览器类型处理文件名称 处理火狐浏览器下载文件名乱码
if(agent != null && agent.toLowerCase().indexOf("firefox") > 0)
{
fileName = new String(fileName.getBytes("UTF-8"),"ISO-8859-1");
}
else//其他浏览的中文名称编码
{
fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
}
//设置content-disposition响应头控制浏览器以下载的形式打开文件,中文文件名要使用URLEncoder.encode方法进行编码,否则会出现文件名乱码
response.reset();
response.setHeader("content-disposition", "attachment;filename="+fileName);
response.setContentType("application/octet-stream");
URL url = new URL(realPath);
HttpURLConnection uc = (HttpURLConnection) url.openConnection();
uc.setDoInput(true);//设置是否要从 URL 连接读取数据,默认为true
uc.connect();
InputStream in = uc.getInputStream();
/* File file = new File(realPath);
InputStream in = new FileInputStream(file);*/
int len = 0;
byte[] buffer = new byte[1024];
OutputStream out = response.getOutputStream();
while ((len = in.read(buffer)) > 0) {
out.write(buffer,0,len);//将缓冲区的数据输出到客户端浏览器
out.flush();
}
out.close();
in.close();
}
推荐阅读
-
大量异常带来性能的影响 博客分类: java-jvm&性能&原理 异常和性能
-
java 远程下载服务器的文件 博客分类: java java
-
SimpleDateFormat 的使用注意点 博客分类: Java javaSimpleDateFormat日期格式化DateFormat
-
Java分布式应用学习笔记04JDK的并发包的集合总结---后篇 博客分类: 分布式集群 分布式集群并发包Java集合
-
Java分布式应用学习笔记04JDK的并发包的集合总结---前篇 博客分类: 分布式集群 分布式集群并发包集合Java
-
Java中的final关键字 博客分类: Java基础 javafinal
-
生僻字与16进制的转换 博客分类: Java编程 生僻字16进制转换java
-
Java分布式应用学习笔记05多线程下的并发同步器----后篇 博客分类: 分布式集群 分布式集群线程调度多线程同步器
-
Object类的equals方法和hashCode方法 博客分类: Java基础 javaequalshashCode
-
Java分布式应用学习笔记05多线程下的并发同步器----前篇 博客分类: 分布式集群 分布式集群并发包线程调度器多线程