javaweb文件下载
文件下载在web应用开发中属于基本且常用的功能,下载接口实现浏览器打开下载页面:
package util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
public class WebDownload {
private static Logger LOG = LoggerFactory.getLogger(WebDownload.class);
public static void download(String filePath, String downloadName, HttpServletResponse response) throws Exception {
LOG.info("down file path: " + filePath);
long fileLength = new File(filePath).length();
response.setContentType("application/octet-stream");
response.setHeader("Content-disposition", "attachment; filename=" +
new String(downloadName.getBytes("utf-8"), "ISO-8859-1"));
response.setHeader("Content-Length", String.valueOf(fileLength));
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filePath));
BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[2048];
int bytesRead;
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}
bis.close();
bos.close();
}
public static void download(InputStream inputStream, String fileName, HttpServletResponse response) throws Exception {
LOG.info("down file path: " + fileName);
//设置response参数,可以打开下载页面
//response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setContentType("application/octet-stream");
response.setHeader("Content-disposition", "attachment; filename=" +
new String(fileName.getBytes("utf-8"), "ISO-8859-1"));
//response.setHeader("Content-Length", String.valueOf(fileLength));
response.reset();
ServletOutputStream out = response.getOutputStream();
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(inputStream);
bos = new BufferedOutputStream(out);
byte[] buff = new byte[2048];
int bytesRead;
// Simple read/write loop.
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}
} catch (Exception e) {
LOG.error("down file by stream failed, for ", e);
} finally {
if (bis != null) {
bis.close();
}
if (bos != null) {
bos.close();
}
}
}
}