首页 > 编程语言 >Java生成二维码并浏览器下载,也可打包成zip下载

Java生成二维码并浏览器下载,也可打包成zip下载

时间:2023-01-06 17:03:23浏览次数:42  
标签:Java String zip ze 二维码 new response 下载 hints

不说废话,直接上代码
1.单个生成二维码并下载
codeNo为前端传的需要生产二维码的内容
public void qrCode(HttpServletRequest request,HttpServletResponse response, String codeNo) throws Exception {
//二维码中包含的信息
String content = codeNo;
Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
// 指定编码格式
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
// 指定纠错级别(L--7%,M--15%,Q--25%,H--30%)
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
// 编码内容,编码类型(这里指定为二维码),生成图片宽度,生成图片高度,设置参数
BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, 200, 200, hints);
//设置请求头
response.setHeader("Content-Type","application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + System.currentTimeMillis() + "二维码.png");
OutputStream outputStream = response.getOutputStream();
MatrixToImageWriter.writeToStream(bitMatrix, "png", outputStream);
outputStream.flush();
outputStream.close();
}

2.多个二维码生产并打包成zip下载
codeNo为生成二维码的内容,name为二维码的名称,注意生成完是图片的形式,如果没有名称不好分辨哪个二维码是哪个生成的
public void qrCode(HttpServletRequest request,HttpServletResponse response, String codeNo, String name) throws Exception {
try {
String[] codeNoArr = codeNo.split(",");
String[] nameArr = name.split(",");

        // 下载框代码
        response.reset();
        response.setContentType("application/octet-stream");
        response.setHeader("Content-Disposition", "attachment; filename="
                + URLEncoder.encode("二维码.zip", "UTF-8"));
        OutputStream os = response.getOutputStream();

        ZipOutputStream zos = new ZipOutputStream(os);
        //每一个ZipEntry对应一个文件
        ZipEntry ze = null;
        for (int i = 0; i < codeNoArr.length; i++) {
            //二维码内容放入这里
            String content = codeNoArr[i];
            MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
            Map hints = new HashMap();
            hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
            BitMatrix bitMatrix = multiFormatWriter.encode(content,
                    BarcodeFormat.QR_CODE, 400, 400);

            // 创建一个ZipEntry,并可以设置Name和其它的一些属性
            ze = new ZipEntry(nameArr[i] + System.currentTimeMillis() + ".png");//name
            //ze.setSize(sourceFile.length());
            //ze.setTime(sourceFile.lastModified());
            // 先将ZipEntry加到zos中,再写入实际的文件内容
            zos.putNextEntry(ze);
            MatrixToImageWriter.writeToStream(bitMatrix, "png", zos);//写入时写zos,而不是ze
        }

        zos.close();
        os.flush();
        os.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

标签:Java,String,zip,ze,二维码,new,response,下载,hints
From: https://www.cnblogs.com/zzqcupidzhq/p/17030968.html

相关文章

  • Java8-Stream流式计算
    什么是Stream流式计算大数据:存储+计算集合、MySQL本质就是存储东西的;计算都应该交给流来操作!Stream是对集合功能的增强,它提供了各种非常便利、高效的聚合操作,可以大......
  • 第13届蓝桥杯javaB组
    第13届蓝桥杯javaB组试题A星期计算问题描述已知今天是星期六,请问\(20^{22}\)天后是星期几?注意用数字\(1\)到\(7\)表示星期一到星期日。思路一因为每七天一个......
  • ABP word下载 模板替换 文件下载
    原文:https://github.com/A-Grass-Code/OpenDemo/tree/main/Word模板文件的替换并生成新的Word文件引用的包:DocX代码publicFileResultDownload(intid)......
  • java基础
    Java规范Java的编译过程记事本写java的步骤publicclass类名{publicstaticvoidmain(String[]args){System.out.println("Hello,World"); }}编写......
  • bootstrap下载进度条
    原来的web应用中文件下载都是打开一个新的窗口,文件自动下载后需手动关闭新打开的窗口,且没有下载进度显示。<script>window.open(downloadUrl,'__blank');</script>......
  • 简单java servlet的登录脚本,部署到docker
    先打算参考这篇文章Simpleloginpageexampleusingjspservlet-Candidjava内含war文件和zip文件。但是tomcat上该war文件总是报错。于是又参考这篇(46条消息)Jav......
  • [转]设置.NET Core支持下载wwwroot下的apk文件
    .netcore项目发布Linux服务器后,有个apk放在wwwroot文件夹下,想请求地址的时候下载apk文件,但是一直提示找不到该文件其他png,txt,html等格式都能访问排查了jexus原因后......
  • JavaScript
    JavaScript1.基本语法//1.定义变量变量类型变量名=变量值;varnum=1;alert(num)//2.条件控制varscore=81;if(score>60&&score<70){alert("......
  • Java中的POJO与JavaBean / Java Bean与POJO的区别与联系
    POJO(PlainOrdinaryJavaObject)即普通Java类,具有一部分getter/setter方法的那种类就可以称作POJO。有一些private的参数作为对象的属性,然后针对每一个参数定义get和set......
  • Java final关键字修饰对象
    结论:final修饰对象,对象的内容可变,引用不可变。final应用于类、方法和变量、对象时意义是不同的,但本质是一样的,都表示不可改变。但是修饰对象时要注意:因为对象是引用类......