写了一段servelt下载的代码,直接浏览器保存没有问题,如果是下载工具下载的话就会出错,而且下载的时候在迅雷里面显示的不是我代码里面指定的文件名,直接是servelt的名称;
servelt下载代码:
[code="java"]
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String path = request.getParameter("path");
try {
String fileName = request.getParameter("fileName").trim();
int c = fileName.lastIndexOf(".");
String name = fileName.substring(0, c > 0 ? c : fileName.length())
+ "."
+ path.substring(path.lastIndexOf(".") + 1, path.length());
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachement;filename=\""
+ new String(name.getBytes("GBK"), "ISO8859_1") + "\"");
File file = new File(Const.getCurrentUtterlyPath() + path);
if (!file.exists()) {
throw new IOException(fileName + ",所下载的文件不存在!");
}
response.setContentLength(Integer.valueOf(String.valueOf(file.length())));
InputStream fs = new FileInputStream(file);
OutputStream os = response.getOutputStream();
byte[] buff = new byte[1024];
int readCount = 0;
readCount = fs.read(buff);
while (readCount != -1) {
os.write(buff, 0, readCount);
readCount = fs.read(buff);
}
if (fs != null) {
fs.close();
}
if (os != null) {
os.flush();
os.close();
}
response.setStatus(response.SC_OK);
response.flushBuffer();
} catch (IOException e) {
LOG.error("error: " + e.getMessage() + ",path: " + path);
throw e;
}
}
[/code]