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 远程下载服务器的文件 博客分类: java java
-
由wsdl生成的java vo类不适合做普通java vo 博客分类: CXF/WebService wsdlwebservicerpcwsdl to java classvo
-
Java动态zip下载,IE8无法打开的问题(不可预料的压缩文件末端) 博客分类: HTTP zipie8contenttype
-
文件输出流FileOutputStream练习 博客分类: java基础 FileOutputStreamwrite方法
-
提高文件复制性能之多线程复制文件 博客分类: java基础 ThreadRandomAccessFileFileChannel
-
更正--提高文件复制性能 博客分类: java基础
-
java 中的String 和new String 的区别 博客分类: JDK//Demo Stringnew String()
-
关于JAVA - gc的工作(一) 博客分类: JDK//Demo javagc垃圾回收jvm虚拟机
-
hibernate的hql中的java常量会引起性能问题 博客分类: hibernate
-
JAVA中堆和栈的区别 博客分类: JDK//Demo java堆栈