我写了个简单的下载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();
}
}
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();
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货