vo类
package com.ruoyi.common.utils.file;
import com.ruoyi.common.enums.QrCodeTypeEnum;
import lombok.Data;
@Data
public class QrCodeEntityVo {
private String fileName;
private String url;
private QrCodeTypeEnum downType;
}
工具类方法
public static void batchExportQrCode(HttpServletResponse response, List<QrCodeEntityVo> list) {
String projectUrl = RuoYiConfig.getProjectUrl() + "/common/downloadLabelsNumberQrCode";
List<QrCodeEntityVo> voList = list.stream().map(labels -> {
QrCodeEntityVo vo = new QrCodeEntityVo();
vo.setFileName(labels.getFileName());
vo.setUrl(projectUrl + "?fileName=" + labels.getFileName() + "&module=" + labels.getDownType().name());
return vo;
}).collect(Collectors.toList());
String zipFileName = "QrCode.zip";
response.reset();
response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition", "attachment;filename=" + zipFileName);
ZipOutputStream zipOutputStream = null;
try {
zipOutputStream = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
zipOutputStream.setMethod(ZipOutputStream.DEFLATED);
} catch (Exception e) {
e.printStackTrace();
}
DataOutputStream os = null;
for (QrCodeEntityVo vo : voList) {
if (StringUtils.isEmpty(vo.getUrl())) {
continue;
}
String fileName = vo.getFileName();
File file = new File("");
try {
URL url = new URL(vo.getUrl());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
InputStream is = conn.getInputStream();
file = FileUtils.inputStreamToFile(is, fileName);
} catch (Exception e) {
e.printStackTrace();
}
if (file.exists()) {
try {
assert zipOutputStream != null;
zipOutputStream.putNextEntry(new ZipEntry(fileName));
os = new DataOutputStream(zipOutputStream);
InputStream is = new FileInputStream(file);
byte[] b = new byte[100];
int length = 0;
while ((length = is.read(b)) != -1) {
os.write(b, 0, length);
}
is.close();
zipOutputStream.closeEntry();
} catch (IOException e) {
e.printStackTrace();
}
}
}
try {
if (os != null) {
os.flush();
os.close();
}
if (zipOutputStream != null) {
zipOutputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static File inputStreamToFile(InputStream ins, String name) throws Exception {
File file = new File(System.getProperty("java.io.tmpdir") + File.separator + name);
if (file.exists()) {
return file;
}
OutputStream os = new FileOutputStream(file);
int bytesRead;
int len = 8192;
byte[] buffer = new byte[len];
while ((bytesRead = ins.read(buffer, 0, len)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
ins.close();
return file;
}
枚举类
package com.ruoyi.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
@AllArgsConstructor
@Getter
public enum QrCodeTypeEnum {
NmCollectingLabelsQrCode,
RegistrationNumberQrCode,
;
}