| 发表于:2008-01-10 21:08:32 楼主 |
我写了个简单的下载servlet,代码如下,但点击下载附件链接时弹出下载窗口,点击下载则报错,错误如题,可这并不影响正常下载,请问为何? package net.servlet; import java.io.fileinputstream; import java.io.outputstream; import java.io.ioexception; import java.io.printwriter; import net.object.*; import javax.servlet.servletexception; import javax.servlet.servletoutputstream; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; public class getfile extends httpservlet { public getfile() { super(); } public void destroy() { super.destroy(); // just puts "destroy" string in log } public void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { string attachid=request.getparameter("attach");//获取附件编号 string realpath=request.getrealpath("/"); string filepath=getservletcontext().getinitparameter("filepath"); fileinputstream in=null; servletoutputstream output = null; int id=integer.valueof(attachid); messagedao messagedao=new messagedao(); message message=new message(); message=messagedao.findbyid(id); string attachname=message.getmessageattach();//获取附件名称 string u_name =realpath+ filepath+"\\"+ attachname ; try { response.reset(); response.setcontenttype("application/x-msdownload"); response.setheader("content-disposition", "attachment; filename=" + toutf8string(attachname)); in = new fileinputstream(u_name); output=response.getoutputstream(); output.flush(); int aread = 0; while((aread = in.read()) != -1 & in != null) { output.write(aread); } output.flush(); } catch(exception e) { e.printstacktrace(); } finally { in.close(); output.close(); } } public void init() throws servletexception { // put your code here } public static string toutf8string(string s) { stringbuffer sb = new stringbuffer(); for (int i=0;i <s.length();i++) { char c = s.charat(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()); } } } return sb.tostring(); } } |
|
|
|
|