//下载的方法如下
public void sendToClient() throws Exception {
File file = null;
try {
FacesContext facesContext = FacesContext.getCurrentInstance();
ServletContext servletContext = (ServletContext) facesContext
.getExternalContext().getContext();
String filePath = (String) servletContext.getRealPath("/")
+ "dataCollector/WorkDBDownload";
String fileName = "WorkDB.Assets";
file = new File(filePath + "/download" + "_" + currentOrgan.getId()
+ "/" + fileName);
HttpServletResponse response = (HttpServletResponse) facesContext
.getExternalContext().getResponse();
response.setContentType("application/x-msdownload");
String header = RequestParam.getRequest().getHeader("User-Agent");
if (header.indexOf("MSIE") > 0) {
response.setHeader("Content-disposition",
"attachment;filename=" + fileName);
} else {
StringBuffer contentDisposition = new StringBuffer();
response.setHeader(
"Content-disposition",
new String(contentDisposition.toString().getBytes(
System.getProperty("file.encoding")),
"iso8859_1"));
}
FileInputStream fin = new FileInputStream(file);
byte[] b = new byte[(int) file.length()];
fin.read(b);
ServletOutputStream sos = response.getOutputStream();
sos.write(b);
sos.flush();
sos.close();
// 需要呼叫Complete
facesContext.responseComplete();
fin.close();
} catch (Exception e) {
throw new Exception("下载导出文件错误!", e);
}
}
我的是jsf,需要下载WorkDB.Asset这个文件,这个文件要用sqlite数据库打开的那种, 名字和后缀固定死的,用ie好好的,用火狐下载就是download。jsf,但是修改成这个后缀名还能用里面的数据?求解,谢谢了!付数据库工具和下载错误的那个文件
if (header.indexOf("MSIE") > 0) {
response.setHeader("Content-disposition",
"attachment;filename=" + fileName);
} else {
原因========
貌似都要设置
response.setHeader("Content-disposition",
"attachment;filename=" + fileName);
这是我之前写的 除了360浏览器好像有问题 其他浏览器均没问题 你试着改改吧
[code="java"]package cn.javass.ssonline.upload.web.servlet;
import cn.javass.ssonline.upload.util.UploadUtils;
import java.io.*;
import java.net.URLDecoder;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DownloadServlet extends HttpServlet
{
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
doPost(req, resp);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
//只允许有一个参数 filename
String filename = new String(req.getQueryString().getBytes("ISO-8859-1"), "UTF-8").substring(9);
if ((filename == null) || (filename.trim().length() == 0) || (filename.contains("\\.\\."))) {
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().write("您下载的文件不存在!");
return;
}
download(req, resp, filename);
}
private void download(HttpServletRequest request, HttpServletResponse response, String filename)
{
String userAgent = request.getHeader("User-Agent");
boolean isIE = (userAgent != null) && (userAgent.toLowerCase().indexOf("msie") != -1);
try
{
filename = URLDecoder.decode(filename, "UTF-8");
String filePath = UploadUtils.getUploadDir(request) + filename;
File file = new File(filePath);
if ((!(file.exists())) || (!(file.canRead()))) {
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("您下载的文件不存在!");
return;
}
byte[] buf = new byte[1024];
int len = 0;
BufferedInputStream br = null;
OutputStream ut = null;
response.reset();
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "must-revalidate, no-transform");
response.setDateHeader("Expires", 0L);
String displayFilename = filename.substring(filename.lastIndexOf("_") + 1);
displayFilename = displayFilename.replace(" ", "_");
response.setContentType("application/x-download");
displayFilename = "[私塾在线学习网]"+displayFilename;
if (isIE) {
displayFilename = URLEncoder.encode(displayFilename, "UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=\"" + displayFilename + "\"");
} else {
displayFilename = new String(displayFilename.getBytes("UTF-8"), "ISO8859-1");
response.setHeader("Content-Disposition", "attachment;filename=" + displayFilename);
}
br = new BufferedInputStream(new FileInputStream(file));
ut = response.getOutputStream();
while ((len = br.read(buf)) != -1)
ut.write(buf, 0, len);
}
catch (Exception e) {
e.printStackTrace();
}
}
}[/code]
对,对于下载类型应该设置为:
response.setContentType("application/x-download");
我给你回复了啊
esponse.setHeader("Content-Disposition", "attachment;filename="
+ new String((fileName).getBytes("gb2312"), "ISO8859-1"));