@Override
public void dowloadQrcode(Map<String, Object> hashMap) {
String string = JsonUtil.toString(hashMap);
String path = System.getProperty("user.dir");
String encoded = Base64.getEncoder().encodeToString(string.getBytes());
String fileName=encoded + ".jpg";
String filePath=path + "/tmp/" + encoded + ".jpg";
FileInputStream fileInputStream = null;
InputStream inputStream = null;
OutputStream outputStream = null;
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletResponse response = attributes.getResponse();
response.reset();
try {
Map<EncodeHintType, Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
hints.put(EncodeHintType.MARGIN, 2);
QRCodeWriter qrCodeWriter = new QRCodeWriter();
BitMatrix bm = qrCodeWriter.encode(string, BarcodeFormat.QR_CODE, 200, 200, hints);
File upload = new File(path, "tmp");
if (!upload.exists()) {
upload.mkdirs();
}
File file = new File(filePath);
MatrixToImageWriter.writeToPath(bm, "jpg", file.toPath());
response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
response.addHeader("Content-Length", "" + file.length());
fileInputStream = new FileInputStream(filePath);
inputStream = new BufferedInputStream(fileInputStream);
outputStream = new BufferedOutputStream(response.getOutputStream());
byte[] buffer = new byte[inputStream.available()];
inputStream.read(buffer);
response.setContentType("application/octet-stream");
outputStream.write(buffer);
outputStream.flush();
} catch (Exception e) {
throw new ServiceException("二维码下载异常");
} finally {
try {
if (fileInputStream != null) {
fileInputStream.close();
}
if (inputStream != null) {
inputStream.close();
}
if (outputStream != null) {
outputStream.close();
}
File file = new File(filePath);
if(file.exists()){
file.delete();
}
} catch (Exception e2) {
throw new ServiceException("二维码下载流关闭异常");
}
}
}