import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import com.TopWisdom.framework.util.*; public class WebDownLoad extends HttpServlet { public WebDownLoad() { } private ServletConfig config; public void init(ServletConfig config) throws ServletException { super.init(config); this.config = config; } public void doPost(HttpServletRequest req,HttpServletResponse res) throws ServletException { doGet(req,res); } file://取得附件的名称 public static String getAttachName(String file_name) { if(file_name==null) return ""; file_name = file_name.trim(); int iPos = 0; iPos = file_name.lastIndexOf("\\"); if(iPos>-1){ file_name = file_name.substring(iPos+1); } iPos = file_name.lastIndexOf("/"); if(iPos>-1){ file_name = file_name.substring(iPos+1); } iPos = file_name.lastIndexOf(File.separator); if(iPos>-1){ file_name = file_name.substring(iPos+1); } return file_name; } file://UTF8转码 public static String toUtf8String(String s) { StringBuffer sb = new StringBuffer(); for (int i=0;i if (c >= 0 && c <= 255) { sb.append(c); } else { byte[] b; try { b = Character.toString(c).getBytes("utf-8"); } catch (Exception ex) { System.out.println(ex); b = new byte[0]; } for (int j = 0; j < b.length; j++) { int k = b[j]; if (k < 0) k += 256; sb.append("%" + Integer.toHexString(k).toUpperCase()); } } } String s_utf8 = sb.toString(); sb.delete(0,sb.length()); sb.setLength(0); sb = null; return s_utf8; } file://取得下载文件的真实全路径名称 private String getRealName(HttpServletRequest request,String file_name) { if(request==null || file_name==null) return null; file_name = file_name.trim(); if(file_name.equals("")) return null; String file_path = request.getRealPath(file_name); if ( file_path== null) return null; File file = new File(file_path); if (!file.exists()) return null; return file_path; } file://实现下载 public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException { String file_name = request.getParameter("file_name"); if(file_name==null) file_name = ""; file_name = file_name.trim(); InputStream inStream= null; String attch_name = ""; byte[] b = new byte[100]; int len= 0; try { file://取得附件的名称 attch_name = getAttachName(file_name); file_name = getRealName(request,file_name); if(file_name==null) { System.out.println("文件不存在,或者禁止下载"); return ; } attch_name = toUtf8String(attch_name); file://读到流中 inStream=new FileInputStream(file_name); file://设置输出的格式 response.reset(); response.setContentType("application/x-msdownload"); response.addHeader("Content-Disposition","attachment; filename=\"" + attch_name + "\""); file://循环取出流中的数据 while((len=inStream.read(b)) >0) { response.getOutputStream().write(b,0,len); } inStream.close(); }catch ( Exception e ){ if ( e instanceof java.io.FileNotFoundException ) { try { response.sendRedirect("/tip/file_not_found.html"); } catch ( IOException ex ) { ex.printStackTrace(System.err); } } else { e.printStackTrace(System.err); } } } } |
|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )
GMT+8, 2024-9-30 11:27 , Processed in 0.193618 second(s), 12 queries , Gzip On, MemCache On.
Powered by Discuz! X3.5
© 2001-2023 Discuz! Team.