在Tomcat里,我写了一个jsp文件实现打开PDF文件,
通过IE来访问这个PDF文件
但是,IE出现错误提示,无法下载来自JSP的文件
无法打开该站点,请求的站点不可用,或者找不到
我使用的是IE7版本,但是换个IE6的就可以
后来使用了opera浏览器也可以正常的打开PDF的文件
请问这个jsp的代码有问题呢?
还是跟浏览器的设置有关系?
jsp代码如下: String filepath="D:\\JAVA\\Tomcat\\webapps\\newReports\\";
String filename = new String(request.getParameter("filename").getBytes("GB2312"));
response.setHeader("Content-Type","application/pdf");
response.setHeader("Content-Disposition","attachment;filename="+filename);
response.setHeader("Connection","close");
ServletOutputStream sos=response.getOutputStream();
FileInputStream fis= new FileInputStream(filepath+filename);
byte b[]=new byte[1000];
int j;
while((j=fis.read(b))!=-1){sos.write(b,0,j);}
fis.close();
sos.flush();
sos.close();
通过IE来访问这个PDF文件
但是,IE出现错误提示,无法下载来自JSP的文件
无法打开该站点,请求的站点不可用,或者找不到
我使用的是IE7版本,但是换个IE6的就可以
后来使用了opera浏览器也可以正常的打开PDF的文件
请问这个jsp的代码有问题呢?
还是跟浏览器的设置有关系?
jsp代码如下: String filepath="D:\\JAVA\\Tomcat\\webapps\\newReports\\";
String filename = new String(request.getParameter("filename").getBytes("GB2312"));
response.setHeader("Content-Type","application/pdf");
response.setHeader("Content-Disposition","attachment;filename="+filename);
response.setHeader("Connection","close");
ServletOutputStream sos=response.getOutputStream();
FileInputStream fis= new FileInputStream(filepath+filename);
byte b[]=new byte[1000];
int j;
while((j=fis.read(b))!=-1){sos.write(b,0,j);}
fis.close();
sos.flush();
sos.close();
response.setContentType("application/x-download"); // 设置为下载application/x-download
String name = null;
try {
name = new String(request.getParameter("filename").getBytes("ISO-8859-1"), "GBK"); //################设置获取参数的编码
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
String filenamedownload = "/files/" + name; // 即将下载的文件的相对路径
String filenamedisplay = name; // 下载文件时显示的文件保存名称
try {
filenamedisplay = URLEncoder.encode(filenamedisplay,"gbk");
response.addHeader("Content-Disposition","attachment;filename=" + filenamedisplay);
RequestDispatcher dispatcher = request.getRequestDispatcher(filenamedownload);
if(dispatcher != null) {
dispatcher.forward(request,response);
}
response.flushBuffer();
}
catch(Exception e) {
e.printStackTrace();
}
}
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
这是我那个servlet导入的包
String filename = "Report." + rs.getString("FILETYPE");
response.setHeader("Content-Disposition","attachment;filename="+new String(filename.getBytes("GBK"),"iso8859-1"));
response.setContentType(rs.getString("FILETYPE"));
OutputStream os = response.getOutputStream();
Blob blob = rs.getBlob("REPORTFILE");
byte[] bytes = new byte[(int)blob.length()];
InputStream ins = blob.getBinaryStream(); int length;
while ((length = ins.read(bytes)) != -1)
{
os.write(bytes, 0, length);
}
response.setStatus(response.SC_OK);
response.flushBuffer();
读硬盘文件:
response.setContentType("pdf");
response.setHeader("Content-Disposition","attachment; filename=\"XXX.pdf\"");String strFileName = "X:\\XXX.pdf";
OutputStream outputStream = response.getOutputStream();
InputStream inputStream = new FileInputStream(strFileName); byte[] buffer = new byte[65536];
int i = -1;
while ((i = inputStream.read(buffer)) != -1)
{
outputStream.write(buffer, 0, i);
}
outputStream.flush();
outputStream.close();
inputStream.close();
outputStream = null;
当时我的情况是把BLOB的文本写到界面,发现界面下面的BUTTON无法显示,但是在IE6里面是没问题的,
后来改成用byte[] bytes = new byte[(int)blob.length()]; 在两个版本的浏览器里都没问题.
仅仅是打开一个文件
那我byte[] bytes = new byte[?] ?的长度应该怎么去确定呢?
重新写了代码
如下:
BufferedInputStream inputStream = null;
byte[] fileByte = new byte[1024];
int fileLen = 0;
String filename = request.getParameter("filename");
File file = new File("D:\\JAVA\\Tomcat\\webapps\\newReports\\"+filename);
if (file.exists()) {
inputStream = new BufferedInputStream(new FileInputStream(file));
} else {
try {
throw new Exception("file not found");
} catch (Exception e) {
e.printStackTrace();
}
}
response.reset();
response.setContentType("application/pdf");
OutputStream outStream = response.getOutputStream();
while ((fileLen = inputStream.read(fileByte)) != -1) {
outStream.write(fileByte,0,fileLen);
}
inputStream.close();
outStream.close(); 仍然谢谢各位支持