java 如何實現檔案下載時,彈出檔案儲存視窗
阿新 • • 發佈:2019-01-25
response.setContentType("application/octet-stream"); response.setContentType("application/OCTET-STREAM;charset=UTF-8"); response.setHeader("Content-Disposition", "attachment;filename=" + fileName1); File file = new File(filePath + fileName); try { fis = new FileInputStream(file); out = new BufferedOutputStream(response.getOutputStream()); byte[] buffer = new byte[1024]; int len; while ((len = fis.read(buffer)) != -1) { out.write(buffer, 0, len); out.flush(); } }catch.......
一種線上開啟或下載的方式
public String executeCommandUDownload(ActionContext context)throws Exception{ HttpServletResponse response = context.getResponse(); response.setCharacterEncoding("UTF-8"); boolean isOnLine = false; String fileName = context.getRequest().getParameter("fileName"); Connection con = null; HttpServletRequest request = context.getRequest(); String filePath = null; BufferedInputStream buffer=null; OutputStream out=null; try { con = this.getConnection(context); if("".equals(fileName) || fileName == null){ FileInfoBean bean = new FileInfoBean(); fileName = bean.findName(con, id); } File f = new File(filePath); //檢查該檔案是否存在 if(!f.exists()){ response.sendError(404,"File not found!"); return "File not found!"; } buffer = 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()).getBytes("gbk")); //檔名應該編碼成UTF-8 } else{ //純下載方式 response.setContentType("application/x-msdownload"); response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(f.getName(),"UTF-8")); } out = response.getOutputStream(); while((len = buffer.read(buf)) >0) out.write(buf,0,len); }catch(Throwable e) { e.printStackTrace(); }finally { try { buffer.close(); out.close(); }catch(Throwable e) { e.printStackTrace(); } } return ""; }