Java文件下载的集中方式
Java文件下载的几种方式
转 http://mblog.hjenglish.com/zhengxiang33/1518891.html
public?HttpServletResponse?download(String?path,?HttpServletResponse?response)?{
????????try?{
????????????//?path是指欲下载的文件的路径。
????????????File?file?=?new?File(path);
????????????//?取得文件名。
????????????String?filename?=?file.getName();
????????????//?取得文件的后缀名。
????????????String?ext?=?filename.substring(filename.lastIndexOf(".")?+?1).toUpperCase();
????????????//?以流的形式下载文件。
????????????InputStream?fis?=?new?BufferedInputStream(new?FileInputStream(path));
????????????byte[]?buffer?=?new?byte[fis.available()];
????????????fis.read(buffer);
????????????fis.close();
????????????//?清空response
????????????response.reset();
????????????//?设置response的Header
????????????response.addHeader("Content-Disposition",?"attachment;filename="?+?new?String(filename.getBytes()));
????????????response.addHeader("Content-Length",?""?+?file.length());
????????????OutputStream?toClient?=?new?BufferedOutputStream(response.getOutputStream());
????????????response.setContentType("application/octet-stream");
????????????toClient.write(buffer);
????????????toClient.flush();
????????????toClient.close();
????????}?catch?(IOException?ex)?{
????????????ex.printStackTrace();
????????}
????????return?response;
????}
?
public?void?downloadLocal(HttpServletResponse?response)?throws?FileNotFoundException?{
????????//?下载本地文件
????????String?fileName?=?"Operator.doc".toString();?//?文件的默认保存名
????????//?读到流中
????????InputStream?inStream?=?new?FileInputStream("c:/Operator.doc");//?文件的存放路径
????????//?设置输出的格式
????????response.reset();
????????response.setContentType("bin");
????????response.addHeader("Content-Disposition",?"attachment;?filename=\""?+?fileName?+?"\"");
????????//?循环取出流中的数据
????????byte[]?b?=?new?byte[100];
????????int?len;
????????try?{
????????????while?((len?=?inStream.read(b))?>?0)
????????????????response.getOutputStream().write(b,?0,?len);
????????????inStream.close();
????????}?catch?(IOException?e)?{
????????????e.printStackTrace();
????????}
????}
????public?void?downloadNet(HttpServletResponse?response)?throws?MalformedURLException?{
????????//?下载网络文件
????????int?bytesum?=?0;
????????int?byteread?=?0;
????????URL?url?=?new?URL("windine.blogdriver.com/logo.gif");
????????try?{
????????????URLConnection?conn?=?url.openConnection();
????????????InputStream?inStream?=?conn.getInputStream();
????????????FileOutputStream?fs?=?new?FileOutputStream("c:/abc.gif");
????????????byte[]?buffer?=?new?byte[1204];
????????????int?length;
????????????while?((byteread?=?inStream.read(buffer))?!=?-1)?{
????????????????bytesum?+=?byteread;
????????????????System.out.println(bytesum);
????????????????fs.write(buffer,?0,?byteread);
????????????}
????????}?catch?(FileNotFoundException?e)?{
????????????e.printStackTrace();
????????}?catch?(IOException?e)?{
????????????e.printStackTrace();
????????}
????}
?
?
//支持在线打开文件的一种方式
???public?void?downLoad(String?filePath,?HttpServletResponse?response,?boolean?isOnLine)?throws?Exception?{
????????File?f?=?new?File(filePath);
????????if?(!f.exists())?{
????????????response.sendError(404,?"File?not?found!");
????????????return;
????????}
????????BufferedInputStream?br?=?new?BufferedInputStream(new?FileInputStream(f));
????????byte[]?buf?=?new?byte[1024];
????????int?len?=?0;
????????response.reset();?//?非常重要
????????if?(isOnLine)?{?//?在线打开方式
????????????URL?u?=?new?URL("file:///"?+?filePath);
????????????response.setContentType(u.openConnection().getContentType());
????????????response.setHeader("Content-Disposition",?"inline;?filename="?+?f.getName());
????????????//?文件名应该编码成UTF-8
????????}?else?{?//?纯下载方式
????????????response.setContentType("application/x-msdownload");
????????????response.setHeader("Content-Disposition",?"attachment;?filename="?+?f.getName());
????????}
????????OutputStream?out?=?response.getOutputStream();
????????while?((len?=?br.read(buf))?>?0)
????????????out.write(buf,?0,?len);
????????br.close();
????????out.close();
????}
?