Java实现下载本项目下的文件
话不多说,直接贴代码
package com.komlin.common.utils;
import org.apache.commons.io.IOUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
/**
* 本地文件下载工具类
*/
public class LocalFileDownload {
/**
*
* @param request 客户端请求
* @param response 响应
* @param relativePath 文件的路径
* @param fileName 文件名
*/
public static void read(HttpServletRequest request, HttpServletResponse response, String relativePath, String fileName) {
try {
InputStream is = LocalFileDownload.class.getResourceAsStream("/" + relativePath + fileName);
byte[] data = IOUtils.toByteArray(is);
response.reset();
response.setContentType("application/octet-stream; charset=UTF-8");
response.setHeader("Content-Disposition", "attachment;fileName=" + setFileDownloadHeader(request, fileName));
response.addHeader("Content-Length", "" + data.length);
response.setHeader("Pragma", URLEncoder.encode(fileName, "UTF-8"));
response.setContentType("application/octet-stream; charset=UTF-8");
IOUtils.write(data, response.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
private static String setFileDownloadHeader(HttpServletRequest request, String fileName) throws UnsupportedEncodingException {
final String agent = request.getHeader("User-Agent");
String filename = fileName;
if (agent.contains("MSIE")) {
// IE浏览器
filename = URLEncoder.encode(filename, "UTF-8");
filename = filename.replace("+", " ");
} else if (agent.contains("Firefox")) {
// 火狐浏览器
filename = new String(fileName.getBytes(), "UTF-8");
} else if (agent.contains("Chrome")) {
// google浏览器
filename = URLEncoder.encode(filename, "UTF-8");
} else {
// 其它浏览器
filename = URLEncoder.encode(filename, "UTF-8");
}
return filename;
}
}
注:只需要把提供给客户端下载的文件放入指定的路径下,然后通过接口请求返回给客户端,给大家贴下controller层的代码,有助于理解
package com.komlin.project.common;
import com.komlin.common.utils.LocalFileDownload;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 下载本地文件
*
* @author mt
*/
@Controller
@RequestMapping
public class DownFileController {
@RequestMapping(value = "/system/util/downExcel", method = RequestMethod.GET)
public void downFile(int type, HttpServletRequest request, HttpServletResponse response) {
try {
String name = "";
if (type == 1) {
name = "学生基本信息导入模版.xlsx";
} else if (type == 2) {
name = "入库单导入模版.xlsx";
} else if (type == 3) {
name = "物资出库记录导入模版.xlsx";
} else if (type == 26){
name = "wbd.apk";
}
LocalFileDownload.read(request, response, "static/excel/", name);
} catch (Exception e) {
e.printStackTrace();
}
}
}
以下为文件夹层级关系