更新時間:2020-11-19 15:49:25 來源:動力節(jié)點(diǎn) 瀏覽22602次
本文實(shí)例為大家分享了Java實(shí)現(xiàn)文件下載的具體代碼,供大家參考,具體內(nèi)容如下:
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();
??????//?設(shè)置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();?//?文件的默認(rèn)保存名
????//?讀到流中
????InputStream?inStream?=?new?FileInputStream("c:/Operator.doc");//?文件的存放路徑
????//?設(shè)置輸出的格式
????response.reset();
????response.setContentType("bin");
????response.addHeader("Content-Disposition",?"attachment;?filename=\""?+?fileName?+?"\"");
????//?循環(huán)取出流中的數(shù)據(jù)
????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?{
????//?下載網(wǎng)絡(luò)文件
????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());
??????//?文件名應(yīng)該編碼成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();
??}
以上就是動力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對“Java實(shí)現(xiàn)文件下載的兩種方法”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。
相關(guān)閱讀

初級 202925

初級 203221

初級 202629

初級 203743