实现的功能:
下载照片到缓存文件,分类存放照片,压缩成zip(保留多级目录结构)通过response返回后自定义下载路径。
【用于此功能练习的代码(详细注释)可参考:https://blog.csdn.net/FFJ_Olivia/article/details/121101226】
package com.epoch.customproject.goer.bill.controller;
import com.alibaba.fastjson.JSON;
import com.epoch.bdp.imageflow.utils.ImageUtils;
import com.epoch.customproject.goer.bill.model.ImageResult;
import com.epoch.ifp.expenseclaim.model.vo.ExpenseImageResult;
import com.epoch.infrastructure.util.service.DateUtils;
import com.epoch.infrastructure.util.service.HttpClientUtils;
import com.epoch.infrastructure.util.service.JsonUtils;
import com.epoch.infrastructure.util.service.fdfs.FastDFSClientUtil;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.util.UriUtils;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MyController {
@PostMapping("/batchDownloadImg")
public void batchDownloadImg(@RequestBody Map> jsonData, HttpServletResponse response) throws IOException {
Map param = new HashMap<>();
List voucherCodeData = jsonData.get("voucherCodeData");
List billCodeData = jsonData.get("billCodeData");
if (voucherCodeData != null) {
// 这里的一步是从数据库获取单据号
List
遗留的问题:
用postman调用接口下载后的zip包的包名中文会乱码,包内的文件目录中文不会乱码。
尝试方法:
- response.setHeader(“Content-Disposition”, “attachment;filename=” + UriUtils.encode(“批量下载.zip”, “UTF-8”));
- response.setHeader(“Content-Disposition”, “attachment;filename=” + UriUtils.encode(“批量下载.zip”, “GBK”));
- response.setContentType(“application/zip;charset=UTF-8”);
- ZipOutputStream.setEncoding(“GBK”);
- ZipOutputStream.setEncoding(“UTF-8”);
以上几种方法皆没效果。暂不确定其他请求方式是否会复现,因为只用postman调用过。
============
有任何疑问或者建议欢迎随时评论交流哈~~