您好,登錄后才能下訂單哦!
這篇文章主要介紹springboot+hutool如何批量生成二維碼壓縮導(dǎo)出功能,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
<!-- 生成二維碼依賴--> <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.4.1</version> </dependency> <!-- 工具包--> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.14</version> </dependency>
QrConfig config = new QrConfig(300, 300); // 設(shè)置邊距,既二維碼和背景之間的邊距 config.setMargin(3); // 設(shè)置前景色,既二維碼顏色(青色) config.setForeColor(Color.CYAN); // 設(shè)置背景色(灰色) config.setBackColor(Color.GRAY); // 生成二維碼到文件,也可以到流 QrCodeUtil.generate("12345678", config, FileUtil.file("E:/image/12345678.jpg"));
然而我們要批量生成不可能完全靠手輸,接下來(lái)實(shí)現(xiàn)導(dǎo)入excel表批量生成。
需要引入poi依賴:
<!-- office文件處理依賴--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.0.0</version> </dependency>
準(zhǔn)備好一份表格:
測(cè)試讀?。?/p>
單張圖片輸出或下載也不方便,這時(shí)候我們要用到壓縮
批量導(dǎo)出壓縮文件
代碼如下
/** * 將文件打包成zip并下載 */ @PostMapping(value = "xiazai",consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @ApiOperation("導(dǎo)出壓縮包") public void download(HttpServletResponse response) throws IOException { response.setHeader("content-type", "application/octet-stream"); response.setHeader("Access-Control-Expose-Headers", "Content-Disposition"); response.setContentType("application/octet-stream"); response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=download.zip"); CompressUtil.createArchiver(CharsetUtil.CHARSET_UTF_8, ArchiveStreamFactory.ZIP,response.getOutputStream()) .add(FileUtil.file("E:/image")); // ZipUtils.pngZip(response.getOutputStream(), qrImages); }
嘗試上傳excel生成二維碼壓縮包并下載(不會(huì)在服務(wù)器生成文件)
代碼如下:
/** * 圖片內(nèi)容與名字 */ @Data public class QrImage { private byte[] bytes; private String name; }
/** * 將生成的二維碼字節(jié)流壓縮導(dǎo)出 * @param outputStream * @param qrImages */ public static void pngZip(OutputStream outputStream,List<QrImage> qrImages) { //Zip輸出流 ZipOutputStream zipOutputStream = null; try { zipOutputStream = new ZipOutputStream(outputStream); for (QrImage file : qrImages) { ZipEntry zipEntry = new ZipEntry(file.getName()+".png"); zipOutputStream.putNextEntry(zipEntry); //寫數(shù)據(jù) zipOutputStream.write(file.getBytes(), 0, file.getBytes().length); zipOutputStream.flush(); } zipOutputStream.flush(); zipOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } finally { // 關(guān)閉流 try { if (zipOutputStream != null) { zipOutputStream.close(); } if (outputStream != null) { outputStream.close(); } } catch (IOException e) { e.printStackTrace(); } } }
/** * 將文件打包成zip并下載 */ @PostMapping(value = "xiazai",consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @ApiImplicitParam(name = "excelFile",value = "excel導(dǎo)入",required = true,dataType="MultipartFile",allowMultiple = true,paramType = "query") @ApiOperation("導(dǎo)出壓縮包") public void download(@RequestParam("excelFile") MultipartFile file, HttpServletResponse response) throws IOException { //讀取excel ExcelReader reader = ExcelUtil.getReader(file.getInputStream()); List<List<Object>> lists = reader.read(); //刪除標(biāo)題 lists.remove(0); //批量生成二維碼 List<QrImage> qrImages = create(lists); response.setHeader("content-type", "application/octet-stream"); response.setHeader("Access-Control-Expose-Headers", "Content-Disposition"); response.setContentType("application/octet-stream"); response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=download.zip"); // CompressUtil.createArchiver(CharsetUtil.CHARSET_UTF_8, ArchiveStreamFactory.ZIP,response.getOutputStream()) // .add(FileUtil.file("E:/image")); ZipUtils.pngZip(response.getOutputStream(), qrImages); } public List<QrImage> create(List<List<Object>> list) throws FileNotFoundException { QrConfig config = new QrConfig(300, 300); // 設(shè)置邊距,既二維碼和背景之間的邊距 config.setMargin(3); // 設(shè)置前景色,既二維碼顏色(青色) config.setForeColor(Color.CYAN); // 設(shè)置背景色(灰色) config.setBackColor(Color.GRAY); byte[] bytes=null; List<QrImage> qrImages = new ArrayList<>(); QrImage qrImage; // 生成二維碼到文件,也可以到流 for (List<Object> objects : list) { //將首列作為二維碼內(nèi)容 qrImage = new QrImage(); //將首列作為二維碼內(nèi)容 bytes = QrCodeUtil.generatePng(objects.get(0).toString(), config.setImg("E:/image/logo.png")); qrImage.setBytes(bytes); qrImage.setName(objects.get(0).toString()); qrImages.add(qrImage); } return qrImages; }
以上是“springboot+hutool如何批量生成二維碼壓縮導(dǎo)出功能”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。