Java文件复制并且下载小笔记
public static void download(String fileName, HttpServletResponse response) {
// InputStream fis = null;
OutputStream toClient = null;
InputStream fis = HttpDownloadUtil.class.getClassLoader().getResourceAsStream(fileName);
try {
// path是指欲下载的文件的路径。
System.out.println(fileName);
// File file = new File(fileName);
if (fis == null) {
response.sendError(404, "File not found!" + fileName);
return;
}
取得文件名。
// String filename = file.getName();
// 取得文件的后缀名。
// String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();
// 以流的形式下载文件。
// fis = new BufferedInputStream(new FileInputStream(fileName));
byte[] buffer = new byte[8 * 1024];
// 清空response
response.reset();
// 设置response的Header
response.addHeader("Content-Disposition",
"attachment;filename=" + new String(fileName.getBytes("gb2312"), "ISO8859-1"));
// response.addHeader("Content-Length", "" + file.length()); //之前我在这里出过错,因为你这里设置了文件的大小,所以说这个地方如果file没有内容,你导出来就会是空的,这里就应该删掉
toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
int count;
while ((count = fis.read(buffer, 0, buffer.length)) > 0) {
toClient.write(buffer, 0, count);
}
toClient.flush();
} catch (IOException ex) {
ex.printStackTrace();
} finally {
if (toClient != null) {
try {
toClient.close();
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
}
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
}
}
}