Java中导入,导出带图片的数据及模板下载
模板下载
首先先整理好需要下载的模板,这里用的excel,也可以用world,自定义格式,下面是整理好的模板样式截图:
将整理好的模板放入Resources下新建的包中,位置截图:
接下来就是进行模板下载编码及可能遇到的问题记录:
1.下面将接口及实现的代码贴上:
//接口
@GetMapping("/dowmload/model")
@ApiOperation(value = "model模板下载")
public void dowmloadRoadsAndBridgesModel(HttpServletRequest request, HttpServletResponse response){
String filename = "model.xlsx";
DownloadExcelUtil.downAchievementTemplate(request, response, filename);
}
//下载实现
import com.goktech.common.core.exception.ServiceException;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.net.URLEncoder;
/**
* @ClassName: DownloadExcelUtil
* @Description: 文件下载
**/
@Slf4j
public class DownloadExcelUtil {
private static final String filesPath = "excelmodel/";
/**
* @description: Resource中文件模板下载
* @param: [request, response, fileName]
**/
public static void downAchievementTemplate(HttpServletRequest request,
HttpServletResponse response,
String fileName){
ServletOutputStream out;
response.setContentType("multipart/form-data");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
try {
InputStream inputStream = DownloadExcelUtil.class.getClassLoader().getResourceAsStream(filesPath + fileName);
String userAgent = request.getHeader("User-Agent");
if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
fileName = URLEncoder.encode(fileName, "UTF-8");
} else {
// 非IE浏览器的处理:
fileName = new String((fileName).getBytes("UTF-8"), "ISO-8859-1");
}
response.setHeader("Content-Disposition", "attachment;fileName=" + fileName);
out = response.getOutputStream();
int b = 0;
byte[] buffer = new byte[1024];
while ((b = inputStream.read(buffer)) != -1) {
// 4.写到输出流(out)中
out.write(buffer, 0, b);
}
inputStream.close();
if (out != null) {
out.flush();
out.close();
}
} catch (Exception e) {
log.error("文件下载失败,异常:{}", e.getMessage());
throw new ServiceException("文件下载失败!");
}
}
}
2.记录这里遇到的问题,在其他地方看到的很多都是使用:
String filePath = DownloadExcelUtil.class.getClassLoader().getResource(filesPath + fileName).getPath();//文件在项目中的存放路径
这种.getResource()
的方式获取文件路径地址,我们这里使用的是.getResourceAsStream()
获取的流,这里有什么问题呢?
前者获取的是根路径,后者获取的是文件的流,当我们使用前者的时候,在本地测试完全没有问题,当发布到线上使用的时候,就会出现如下异常:
当使用后者就可以解决这个文件找不到的问题,至于前者后者的区别,大家可以查看关于使用this.getClass().getResource(“/“)获取文件时遇到的坑_ClassPathResource加载资源文件用法
Java导入带图片的excel内容,可查看文章:Java带图片的excel数据导入
Java中将带图片的数据导出到excel,可查看文章:Java中带图片的数据导出到excel
死鬼~看完了来个三连哦!O.O`
反手就是一个赞赞赞——————————奥里给