public static void main(String[] args) {
try {
String sql="";//查询文件信息sql
Map fileMap=new HashMap<String,String>();//获取到文件相关信息,这里只是演示,没有具体实现
String FileName = (String) fileMap.get("FileName"); //文件名
String filenum=(String) fileMap.get("filenum");//存放在服务器上的具体名称
String filename = filenum + FileName.substring(FileName.lastIndexOf(".")); // 存到到服务器上的名称
String folder = (String) fileMap.get("FilePath"); // 附件所在目录
String newFolder = folder.toLowerCase();
String appPath="";//服务器路径
String fullfilepath = fullfilepath =appPath + folder + File.separator + filename; // 文件所在硬盘的真实路径
/* 读取文件 */
File file = new File(fullfilepath);
if (file.exists()) {
HttpServletResponse response =null;
response.reset();
String extFileName = FileName.substring(FileName.lastIndexOf(".") + 1);
HttpServletRequest request=null;
String userAgent = request.getHeader("User-Agent");
// IE内核浏览器
if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
FileName = java.net.URLEncoder.encode(FileName, "UTF-8");
} else {
// 非IE浏览器的处理:
FileName = new String(FileName.getBytes("UTF-8"), "ISO-8859-1");
}
String contentType = "application/x-msdownload";
// 直接提示下载
response.setHeader("Content-disposition",
String.format("attachment; filename=\"%s\"", FileName));
// response.setContentType("multipart/form-data");
response.setCharacterEncoding("UTF-8");
response.setContentType(contentType);
int fileLength = (int) file.length();
response.setContentLength(fileLength);
/* 如果文件长度大于0 */
if (fileLength != 0) {
/* 创建输入流 */
InputStream inStream = new FileInputStream(file);
byte[] buf = new byte[4096];
/* 创建输出流 */
ServletOutputStream servletOS = response.getOutputStream();
int readLength;
while (((readLength = inStream.read(buf)) != -1)) {
servletOS.write(buf, 0, readLength);
}
inStream.close();
servletOS.flush();
servletOS.close();
}
} else {
System.out.println("文件不存在");//实际上这里应该是日志输出
}
} catch (Exception e) {
//日志输出
System.out.println("文件下载出错!");
}
}