|  |  | 
 |  |  |  | 
 |  |  | import java.io.File; | 
 |  |  | import java.io.FileInputStream; | 
 |  |  | import java.net.URLEncoder; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * web文件下载 | 
 |  |  | 
 |  |  |      */ | 
 |  |  |     @GetMapping("/down") | 
 |  |  |     public void down(String id, HttpServletRequest req, HttpServletResponse rep){ | 
 |  |  |         OthFile fPo = sv.selectById(id) ; | 
 |  |  |         if(fPo != null){ | 
 |  |  |             FileRestVo frVo = fileOp.parseHashcode(fmUrl, fPo.hash) ; | 
 |  |  |             if(frVo.fileSysAbsolutePath != null){ | 
 |  |  |                 if(!frVo.fileSysAbsolutePath.endsWith("\\\\") && !frVo.fileSysAbsolutePath.endsWith("/") ){ | 
 |  |  |                     frVo.fileSysAbsolutePath = frVo.fileSysAbsolutePath + "/" ; | 
 |  |  |         try{ | 
 |  |  |             OthFile fPo = sv.selectById(id) ; | 
 |  |  |             if(fPo != null){ | 
 |  |  |                 FileRestVo frVo = fileOp.parseHashcode(fmUrl, fPo.hash) ; | 
 |  |  |                 if(frVo.fileSysAbsolutePath != null){ | 
 |  |  |                     if(!frVo.fileSysAbsolutePath.endsWith("\\\\") && !frVo.fileSysAbsolutePath.endsWith("/") ){ | 
 |  |  |                         frVo.fileSysAbsolutePath = frVo.fileSysAbsolutePath + "/" ; | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             String filePath = frVo.fileSysAbsolutePath + fPo.filePath ; | 
 |  |  |             File f = new File(filePath) ; | 
 |  |  |             if(f.exists()){ | 
 |  |  |                 String fileReName = fPo.orgName + "." + fPo.extName ; | 
 |  |  |                 try { | 
 |  |  |                     fileReName = new String(fileReName.getBytes("UTF-8"), "ISO-8859-1"); | 
 |  |  |                 } catch (Exception e) { | 
 |  |  |                     fileReName = "file" ; | 
 |  |  |                 } | 
 |  |  |                 rep.addHeader("content-type", "application/octet-stream"); | 
 |  |  |                 rep.addHeader("Content-Disposition", "attachment;fileName=" + fileReName); | 
 |  |  |                 String filePath = frVo.fileSysAbsolutePath + fPo.filePath ; | 
 |  |  |                 File f = new File(filePath) ; | 
 |  |  |                 if(f.exists()){ | 
 |  |  |                     String fileReName = fPo.orgName + "." + fPo.extName ; | 
 |  |  |                     //URLEncoder.encode可以防止中文乱码 | 
 |  |  |                     fileReName = URLEncoder.encode(fileReName, "UTF-8").replaceAll("\\+", "%20"); | 
 |  |  |                     rep.addHeader("content-type", "application/octet-stream"); | 
 |  |  |                     rep.addHeader("Content-Disposition", "attachment;fileName=" + fileReName); | 
 |  |  |  | 
 |  |  |                 ServletOutputStream out = null; | 
 |  |  |                 FileInputStream in = null ; | 
 |  |  |                 try { | 
 |  |  |                     out = rep.getOutputStream() ; | 
 |  |  |                 } catch (Exception ee) { | 
 |  |  |                     out = null ; | 
 |  |  |                 }finally{ | 
 |  |  |                     if(out != null){ | 
 |  |  |                         byte[] bs = new byte[1024] ; | 
 |  |  |                         int len = -1 ; | 
 |  |  |                         try { | 
 |  |  |                             in = new FileInputStream(f); | 
 |  |  |                             len = in.read(bs) ; | 
 |  |  |                             while(len != -1){ | 
 |  |  |                                 out.write(bs, 0, len); | 
 |  |  |                     ServletOutputStream out = null; | 
 |  |  |                     FileInputStream in = null ; | 
 |  |  |                     try { | 
 |  |  |                         out = rep.getOutputStream() ; | 
 |  |  |                     } catch (Exception ee) { | 
 |  |  |                         out = null ; | 
 |  |  |                     }finally{ | 
 |  |  |                         if(out != null){ | 
 |  |  |                             byte[] bs = new byte[1024] ; | 
 |  |  |                             int len = -1 ; | 
 |  |  |                             try { | 
 |  |  |                                 in = new FileInputStream(f); | 
 |  |  |                                 len = in.read(bs) ; | 
 |  |  |                             } | 
 |  |  |                         } catch (Exception eee) { | 
 |  |  |                         } finally { | 
 |  |  |                             if(out != null){ | 
 |  |  |                                 try{ | 
 |  |  |                                     out.flush(); | 
 |  |  |                                     out.close(); | 
 |  |  |                                 }catch(Exception e){ | 
 |  |  |                                 }finally{ | 
 |  |  |                                     if(in != null){ | 
 |  |  |                                         try{ | 
 |  |  |                                             in.close(); | 
 |  |  |                                         }catch(Exception e){ | 
 |  |  |                                 while(len != -1){ | 
 |  |  |                                     out.write(bs, 0, len); | 
 |  |  |                                     len = in.read(bs) ; | 
 |  |  |                                 } | 
 |  |  |                             } catch (Exception eee) { | 
 |  |  |                             } finally { | 
 |  |  |                                 if(out != null){ | 
 |  |  |                                     try{ | 
 |  |  |                                         out.flush(); | 
 |  |  |                                         out.close(); | 
 |  |  |                                     }catch(Exception e){ | 
 |  |  |                                     }finally{ | 
 |  |  |                                         if(in != null){ | 
 |  |  |                                             try{ | 
 |  |  |                                                 in.close(); | 
 |  |  |                                             }catch(Exception e){ | 
 |  |  |                                             } | 
 |  |  |                                         } | 
 |  |  |                                     } | 
 |  |  |                                 } | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 }else{ | 
 |  |  |                 } | 
 |  |  |             }else{ | 
 |  |  |             } | 
 |  |  |         }else{ | 
 |  |  |         }catch (Exception e){ | 
 |  |  |             log.error("下载文件时异常", e); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |     } | 
 |  |  | } |