项目当中有一个批量流量查询模板,提供一个下载功能?
实现:以下不借助oss实现。用oss直接放个下载连接就完事儿了
效果?
WordUtils代码:
package com.reachauto.vsp.portal.util;
import org.apache.commons.io.IOUtils;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
/**
* 下载工具类
*/
public class WordUtils {
private WordUtils() {
}
public static void exportFile(HttpServletResponse response, File file, String name) throws IOException {
InputStream stream = null;
try {
stream = new BufferedInputStream(new FileInputStream(file));
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(name, "UTF-8") + ".xlsx");
copy(stream, response.getOutputStream());
} finally {
if (stream != null) {
stream.close();
}
}
}
public static void exportZipFile(HttpServletResponse response, String filePath) throws IOException {
InputStream stream = null;
File file = new File(filePath);
try {
stream = new BufferedInputStream(new FileInputStream(file));
response.setContentType("application/zip");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(file.getName(), "UTF-8"));
copy(stream, response.getOutputStream());
} finally {
IOUtils.closeQuietly(stream);
if(file.exists()){
file.delete();
}
}
}
private static int copy(InputStream input, OutputStream output) throws IOException {
byte[] buffer = new byte[10240];
int count = 0;
int n = 0;
while (-1 != (n = input.read(buffer))) {
output.write(buffer, 0, n);
count += n;
}
return count;
}
}
Controller代码:
/**
* 模板
* @param request
* @param response
*/
@RequestMapping(value = "/downloadExcel")
public void export(HttpServletRequest request, HttpServletResponse response) {
try {
// server.url=/opt/exportTemplates/
// server.url.window=D:Program Filespicture
//本地路径上线调整服务器路径
String templateFilePath = "C:UsersAdministratorDesktopvspnodeworkspacevspcloud-vsptrunk-portalsrcmainresourcesexportTemplates批量流量查询模板.xlsx";
// File file = new File(request.getSession().getServletContext()
// .getRealPath(templateFilePath));
File file = new File(templateFilePath);
WordUtils.exportFile(response, file, "批量流量查询模板");
} catch (Exception e) {
log.error("/downloadExcel/export", e);
}
}