精华内容
下载资源
问答
  • img = qrcode.make(url) # 已经生成二维码图片对象 img.save('static/qrimg/1.png',"png") # 保存二维码图片 return 'static/qrimg/1.png' #url.html <!DOCTYPE html> 通过url生成二维码 url: 生成...
  • 禅道首页上的右下角有一个手机二维码,由于之前迁移了项目目录,在禅道的配置文件已经做了修改,一切正常,但是在最近几天发现这个首页的二维码出现了无法访问的现象,地址:www/misc-qrCode.html,解决思路: ...

    禅道首页上的右下角有一个手机二维码,由于之前迁移了项目目录,在禅道的配置文件已经做了修改,一切正常,但是在最近几天发现这个首页的二维码出现了无法访问的现象,地址:www/misc-qrCode.html,解决思路:

    1、查询apache的日志,无记录,排除服务器造成的,再次定位禅道的日志,发现在./tmp/log/xxx.log.php的最新日志一直显示报错,打开一看,提示无法找到文件miscModel。

    2、再次分析此tmp文件夹是项目运行时自动生成的,且miscModel这个模块是在./tmp/model/misc.php文件的,上面的引入地址还是以前系统迁移时的路径。

    3、先进行备份以前的tmp文件夹,然后再从安装包里解压到正在使用的系统上。

    通过以上设置,问题解决。

    转载于:https://www.cnblogs.com/EasonJim/p/5844242.html

    展开全文
  • 二维码生成

    2020-08-28 15:11:29
    安装composer里面的二维码扩展 composer require endroid/qr-code 在文件里引入的QrCode ... //传过来的是数组(二维码批量生成时候) foreach ($goodsId as $id){ //要生成二维码的页面网址 .

    安装composer里面的二维码扩展

    composer require endroid/qr-code

    在文件里引入的QrCode

    use Endroid\QrCode\QrCode;
            //前端传过来的id
            $goodsId=Request::param('goods_id');
            //传过来的是数组(二维码批量生成时候)
            foreach ($goodsId as $id){
                //要生成二维码的页面网址
                $url='https://www.baidu.com';
                //实例化QrCode
                $qrcode=new \Endroid\QrCode\QrCode($url);
                //获取当前时间戳当二维码名称
                $time=time();
                //用当前时间戳命名二维码
                $dir='/qrcode/'.$time.'png';
                //判断有没有qrcode这个文件夹,没有则创建(必须创建,不然报错) (用的是tp6框架,创建的文件在public目录下)
                if(!is_dir('qrcode')){
                    mkdir("qrcode");
                }
                //app()->getRootPath()获取当前的跟目录
                $QrcodeAddr=app()->getRootPath().'public'.$dir;
                //将\替换成/  ,此处的\\ 的第一个\为转义
                $addr=str_replace('\\','/',$QrcodeAddr);
                //根据定义的地址生成二维码
                $qrcode->writeFile($addr);
                //生成(更新)二维码
                $goods=Db::name('goods')->where('goods_id',$id)->save(['QRcode'=>$dir]);
                if($goods){
                    return '成功';
                }else{
                    return '失败';
                }
            }

     

    展开全文
  • /** * @ClassName: QRCodeUtil * @Author mingjia.xu * @Date 2020-04-08 & 14:14 * @Describes 二维码生成工具类(当前只有简单的png生成, * jar还可以插入图片logo进二维码,我就简单的放一个方法吧) */ public...

    一个简单生成二维码方式 - 速懂
    这只是一个简单的生成,测试jar工具是否有用,简洁易懂点

    <!-- 生成二维码 -->
    <dependency>
    	<groupId>com.google.zxing</groupId>
    	<artifactId>core</artifactId>
    	<version>3.3.0</version>
    </dependency>
    <dependency>
    	<groupId>com.google.zxing</groupId>
    	<artifactId>javase</artifactId>
    	<version>3.3.0</version>
    </dependency>
    
    import com.google.zxing.BarcodeFormat;
    import com.google.zxing.WriterException;
    import com.google.zxing.client.j2se.MatrixToImageWriter;
    import com.google.zxing.common.BitMatrix;
    import com.google.zxing.qrcode.QRCodeWriter;
    import lombok.extern.slf4j.Slf4j;
    
    import java.io.IOException;
    import java.nio.file.FileSystems;
    import java.nio.file.Path;
    
    /**
     * @ClassName: QRCodeGenerator
     * @Author mingjia.xu
     * @Date 2020-04-14 & 17:36
     * @Describes
     */
    @Slf4j
    public class QRCodeGenerator {
    
    	private static final String QR_CODE_IMAGE_PATH = "/Volumes/Data/er_wei_ma/aaa/MyQRCode.png";
    	private static void generateQRCodeImage(String text, int width, int height, String filePath)
    			throws WriterException,IOException {
    		QRCodeWriter qrCodeWriter = new QRCodeWriter();
    		BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);
    		Path path = FileSystems.getDefault().getPath(filePath);
    		MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);
    		log.info("生成成功");
    
    	}
    
    	public static void main(String[] args) {
    		try {
    			generateQRCodeImage("This is my first QR Code11", 350, 350, QR_CODE_IMAGE_PATH);
    		} catch (WriterException e) {
    			log.info("Could not generate QR Code, WriterException :: " + e.getMessage());
    		} catch (IOException e) {
    			log.info("Could not generate QR Code, IOException :: " + e.getMessage());
    		}
    	}
    
    }
    

    – 友情提醒下:上面的已经是简单二维码生成代码了,下面的是我运用在项目上的代码,需要要参考就可以往下看,不需要就不必要看的了。

    接下来是我用在项目上的代码
    需求:批量生成二维码打包成压缩包返回前端提供下载(*.zip)
    实现步骤:文件夹存在 - 生成二维码 - 放入文件夹 - 打包成zip - 返回response - 删除zip与文件夹
    实现原理解释:先要确定生成文件夹位置是否存在,不存在就生成,然后将生成的二维码全部放入文 件夹中,将文件夹打包成zip,返回流给前端,同时删除包

    • 代码块:(总共分割成4块代码,全放一个方法里不易读)
      • batchProduceQRCode() - 在ServiceImpl层写个接口方法
      • QRCodeUtil.generateQRCode() - 调用二维码生成工具类其一方法
      • ZipUtils.toZip() - 需要调用压缩工具类其一方法
      • FileUtils.deleteDirectory() - file工具类其一方法,删除文件夹

    batchProduceQRCode() -1

    	/**
    	 * 批量生成二维码
    	 * @param store 店铺对象(个人业务需求,用在二维码生成内容上)
    	 * @return 返回打包的zip地址
    	 * @throws WriterException
    	 * @throws IOException
    	 */
    	@Override
    	public void batchProduceQRCode(Store store, HttpServletResponse response, HttpServletRequest request) throws WriterException, IOException {
    		List<Table> tables = this.findAllByStoreId(store.getId());
    		//图片生成地址路径,在当前项目的绝对路径去做起始加入qrcode文件夹 --- 1
    		String pathUrl = String.format("%s/%s/",System.getProperty("user.dir"),"qrcode");
    		File file = new File(pathUrl);
    		if (!file.exists()) {
    			file.mkdir();
    		}
    		//循环生成二维码 --- 2
    		for (Table table : tables) {
    			String c = table.getQrcode().toString();
    			String w = store.getSetting().getTableQRCodePassword();
    			//二维码内容
    			String text = String.format("%s?c=%s&w=%s",appProperties.getQrCodeUrl(),c,w);
    			String fileName = String.format("%s.png",table.getName());
    			QRCodeUtil.generateQRCode(text,350,350,pathUrl+"/"+fileName);
    			log.info("生成二维码图片完成");
    		}
    		//流 --- 3
    		response.setContentType("application/json");
    		String agent = request.getHeader("user-agent");
    		String filename = FileUtils.encodeDownloadFilename("qrcode.zip", agent);
    		response.setHeader("Content-Disposition", "attachment;filename=" + filename);
    		ServletOutputStream outputStream = response.getOutputStream();
    		//压缩 --- 4
    		ZipUtils.toZip(pathUrl, outputStream,true);
    		outputStream.flush();
    		outputStream.close();
    
    		//删除生成的文件夹 --- 5
    		FileUtils.deleteDirectory(pathUrl)}
    

    QRCodeUtil 二维码生成类 -2

    import com.google.zxing.BarcodeFormat;
    import com.google.zxing.WriterException;
    import com.google.zxing.client.j2se.MatrixToImageWriter;
    import com.google.zxing.common.BitMatrix;
    import com.google.zxing.qrcode.QRCodeWriter;
    
    import java.io.IOException;
    import java.nio.file.FileSystems;
    import java.nio.file.Path;
    
    /**
     * @ClassName: QRCodeUtil
     * @Author mingjia.xu
     * @Date 2020-04-08 & 14:14
     * @Describes 二维码生成工具类(当前只有简单的png生成,
     * jar还可以插入图片logo进二维码,我就简单的放一个方法吧)
     */
    public class QRCodeUtil {
    	/**
    	 * 生成二维码
    	 *
    	 * @param text     内容
    	 * @param width    图片宽度
    	 * @param height   图片长度
    	 * @param filePath 生成图片地址
    	 * @throws IOException
    	 */
    	public static void generateQRCode(String text, int width, int height, String filePath) throws WriterException, IOException {
    		QRCodeWriter qrCodeWriter = new QRCodeWriter();
    		BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);
    		Path path = FileSystems.getDefault().getPath(filePath);
    		MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);
    		bitMatrix.clear();
    	}
    }
    

    ZipUtils.toZip() -3 压缩文件夹工具类

    /**
     * @ClassName: ZipUtils
     * @Author mingjia.xu
     * @Date 2020-04-08 & 14:14
     * @Describes zip压缩工具
     */
    @Slf4j
    public class ZipUtils {
    
    	private static final int BUFFER_SIZE = 2 * 1024;
    
    
    	/**
    	 * 压缩成ZIP 方法1
    	 *
    	 * @param srcDir           压缩文件夹路径
    	 * @param out              压缩文件输出流
    	 * @param KeepDirStructure 是否保留原来的目录结构,true:保留目录结构;
    	 *                         false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)
    	 * @throws RuntimeException 压缩失败会抛出运行时异常
    	 */
    	public static void toZip(String srcDir, OutputStream out, boolean KeepDirStructure)
    			throws RuntimeException {
    		long start = System.currentTimeMillis();
    		ZipOutputStream zos = null;
    		try {
    			zos = new ZipOutputStream(out);
    			File sourceFile = new File(srcDir);
    			compress(sourceFile, zos, sourceFile.getName(), KeepDirStructure);
    			long end = System.currentTimeMillis();
    			log.info("压缩完成,耗时:" + (end - start) + " ms");
    		} catch (Exception e) {
    			throw new RuntimeException("zip error from ZipUtils", e);
    		} finally {
    			if (zos != null) {
    				try {
    					zos.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    		}
    	}
    
    
    	/**
    	 * 压缩成ZIP 方法2
    	 *
    	 * @param srcFiles 需要压缩的文件列表
    	 * @param out      压缩文件输出流
    	 * @throws RuntimeException 压缩失败会抛出运行时异常
    	 */
    	public static void toZip(List<File> srcFiles, OutputStream out) throws RuntimeException {
    		long start = System.currentTimeMillis();
    		ZipOutputStream zos = null;
    		try {
    			zos = new ZipOutputStream(out);
    			for (File srcFile : srcFiles) {
    				byte[] buf = new byte[BUFFER_SIZE];
    
    				zos.putNextEntry(new ZipEntry(srcFile.getName()));
    
    				int len;
    				FileInputStream in = new FileInputStream(srcFile);
    				while ((len = in.read(buf)) != -1) {
    					zos.write(buf, 0, len);
    				}
    				zos.closeEntry();
    				in.close();
    			}
    
    			long end = System.currentTimeMillis();
    
    			log.info("压缩完成,耗时:" + (end - start) + " ms");
    		} catch (Exception e) {
    
    			throw new RuntimeException("zip error from ZipUtils", e);
    		} finally {
    
    			if (zos != null) {
    				try {
    
    					zos.close();
    
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    		}
    	}
    
    
    	/**
    	 * 递归压缩方法
    	 *
    	 * @param sourceFile       源文件
    	 * @param zos              zip输出流
    	 * @param name             压缩后的名称
    	 * @param KeepDirStructure 是否保留原来的目录结构,true:保留目录结构;
    	 *                         false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)
    	 * @throws Exception
    	 */
    	private static void compress(File sourceFile, ZipOutputStream zos, String name,
    								 boolean KeepDirStructure) throws Exception {
    
    		byte[] buf = new byte[BUFFER_SIZE];
    		if (sourceFile.isFile()) {
    			// 向zip输出流中添加一个zip实体,构造器中name为zip实体的文件的名字
    			zos.putNextEntry(new ZipEntry(name));
    			// copy文件到zip输出流中
    			int len;
    			FileInputStream in = new FileInputStream(sourceFile);
    			while ((len = in.read(buf)) != -1) {
    				zos.write(buf, 0, len);
    			}
    			// Complete the entry
    			zos.closeEntry();
    			in.close();
    		} else {
    			File[] listFiles = sourceFile.listFiles();
    			if (listFiles == null || listFiles.length == 0) {
    				// 需要保留原来的文件结构时,需要对空文件夹进行处理
    				if (KeepDirStructure) {
    					// 空文件夹的处理
    					zos.putNextEntry(new ZipEntry(name + "/"));
    					// 没有文件,不需要文件的copy
    					zos.closeEntry();
    				}
    
    			} else {
    				for (File file : listFiles) {
    					// 判断是否需要保留原来的文件结构
    					if (KeepDirStructure) {
    						// 注意:file.getName()前面需要带上父文件夹的名字加一斜杠,
    						// 不然最后压缩包中就不能保留原来的文件结构,即:所有文件都跑到压缩包根目录下了
    						compress(file, zos, name + "/" + file.getName(), KeepDirStructure);
    					} else {
    						compress(file, zos, file.getName(), KeepDirStructure);
    					}
    				}
    			}
    		}
    	}
    
    	public static void main(String[] args) throws Exception {
    		/** 测试压缩方法1  */
    //		FileOutputStream fos1 = new FileOutputStream(new File("/Volumes/Data/er_wei_ma/MyQRCode.zip"));
    //		ZipUtils.toZip("/Volumes/Data/er_wei_ma/qwe", fos1, true);
    
    		/** 测试压缩方法2  */
    //        List<File> fileList = new ArrayList<>();
    //        fileList.add(new File("D:/Java/jdk1.7.0_45_64bit/bin/jar.exe"));
    //        fileList.add(new File("D:/Java/jdk1.7.0_45_64bit/bin/java.exe"));
    //        FileOutputStream fos2 = new FileOutputStream(new File("c:/mytest02.zip"));
    //        ZipUtils.toZip(fileList, fos2);
    	}
    }
    

    FileUtils.deleteDirectory() -4 删除工具类,这个你可要可不要

    public class FileUtils {
    	/**
         * 删除文件目录
         * @param path
         * @throws IOException
         */
        public static void deleteDirectory(String path) throws IOException {
            File folder = new File(path);
            org.apache.commons.io.FileUtils.deleteDirectory(folder);
        }
    }
    
    展开全文
  • 二维码生成方法

    2020-12-01 14:07:15
    二维码简单的一个二维码生成上传二维码并且填充log 简单的一个二维码生成 需要的jar包 <!--二维码jar--> <dependency> <groupId>com.google.zxing</groupId> <artifactId>...

    简单的一个二维码生成

    需要的jar包

    <!--二维码jar-->
    		<dependency>
    			<groupId>com.google.zxing</groupId>
    			<artifactId>core</artifactId>
    			<version>3.3.0</version>
    		</dependency>
    		<dependency>
    			<groupId>com.google.zxing</groupId>
    			<artifactId>javase</artifactId>
    			<version>3.3.0</version>
    		</dependency>
    

    简单的二维码:一个给前台二维码或者给前台一个字节数组的二维码,见代码

    package com.jay.code;
    
    import com.google.zxing.BarcodeFormat;
    import com.google.zxing.WriterException;
    import com.google.zxing.client.j2se.MatrixToImageWriter;
    import com.google.zxing.common.BitMatrix;
    import com.google.zxing.qrcode.QRCodeWriter;
    
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.nio.file.FileSystems;
    import java.nio.file.Path;
    
    /**
     * @version 0.0.1
     * @program: spring-poi-demo
     * @description: 二维码生成方法
     * @author: huangzq
     * @create: 2020-12-01 10:47
     */
    public class QRCodeGenerator {
    
        private static final String QR_CODE_IMAGE_PATH = "C:\\Users\\shinelon\\Desktop/MyQRCode.png";
    
        /**
         * 生成二维码图片保存在指定位置
         *
         * @param text
         * @param width
         * @param height
         * @param filePath
         * @throws WriterException
         * @throws IOException
         */
        private static void generateQRCodeImage(String text, int width, int height, String filePath) throws WriterException, IOException {
            QRCodeWriter qrCodeWriter = new QRCodeWriter();
    
            BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);
    
            Path path = FileSystems.getDefault().getPath(filePath);
    
            MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);
    
        }
    
        /**
         * 生成字节数组
         * 这个返回到前端参考:https://blog.csdn.net/gisboygogogo/article/details/86036656
         *
         * @param text
         * @param width
         * @param height
         * @return
         * @throws WriterException
         * @throws IOException
         */
        public static byte[] getQRCodeImage(String text, int width, int height) throws WriterException, IOException {
            QRCodeWriter qrCodeWriter = new QRCodeWriter();
            BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);
            ByteArrayOutputStream pngOutputStream = new ByteArrayOutputStream();
            MatrixToImageWriter.writeToStream(bitMatrix, "PNG", pngOutputStream);
            byte[] pngData = pngOutputStream.toByteArray();
            return pngData;
        }
    
        public static void main(String[] args) {
            try {
                //生成二维码图片
                generateQRCodeImage("you to doing something", 350, 350, QR_CODE_IMAGE_PATH);
                //生成字节数组
                getQRCodeImage("you to doing something", 350, 350);
            } catch (WriterException e) {
                System.out.println("Could not generate QR Code, WriterException :: " + e.getMessage());
            } catch (IOException e) {
                System.out.println("Could not generate QR Code, IOException :: " + e.getMessage());
            }
    
        }
    
    }
    
    

    这个生成二维码就存放在你的桌面,我们到时候需要给前台就使用请求体获取输出流传递给前端,
    字节数组的形式可以参考这个:https://blog.csdn.net/gisboygogogo/article/details/86036656

    上传二维码并且填充log

    响应前台体代码

        @GetMapping(value = "/createLogoQRCode")
        @ApiOperation(value = "有logo二维码")
        public void createLogoQrCode(HttpServletResponse response) {
            appVersionService.creatLogoQrCode(response);
        }
    

    业务层

    @Override
        public void creatLogoQrCode(HttpServletResponse response) {
            ServletOutputStream stream = null;
            try {
               String url = “生成二维码,手机扫出现的内容”;
               stream = response.getOutputStream();
               //存放你的log图标的位置
               String logoPath = staticFinalDataClass.appLogoPath + "logo.jpg";
               log.info("logo图片的路径:{}",logoPath);
               //使用工具类生成二维码
               QRCodeUtil.encode(url, logoPath, stream, true);
            } catch (Exception e) {
                e.getStackTrace();
            } finally {
                if (stream != null) {
                    try {
                        stream.flush();
                        stream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    

    工具类

     private static final String CHARSET = "utf-8";
     private static final String FORMAT_NAME = "JPG";
     /**
      *二维码尺寸
      */
     private static final int QRCODE_SIZE = 300;
    
     /**
      * LOGO宽度
      */
     private static final int WIDTH = 60;
    
     /**
      * LOGO高度
      */
     private static final int HEIGHT = 60;
    
    public static void encode(String content, String imgPath, OutputStream output, boolean needCompress) throws Exception {
        BufferedImage image = QRCodeUtil.createImage(content, imgPath, needCompress);
        ImageIO.write(image, FORMAT_NAME, output);
    }
    
    /**
     * 二维码生成方法  插入log图片嵌入二维码中
     */
    private static BufferedImage createImage(String content, String imgPath, boolean needCompress) throws Exception {
        Hashtable hints = new Hashtable();
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
        hints.put(EncodeHintType.CHARACTER_SET, CHARSET);
        hints.put(EncodeHintType.MARGIN, 1);
        BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE,
                hints);
        int width = bitMatrix.getWidth();
        int height = bitMatrix.getHeight();
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);
            }
        }
        if (imgPath == null || "".equals(imgPath)) {
            return image;
        }
        // 插入logo图片
        QRCodeUtil.insertImage(image, imgPath, needCompress);
        return image;
    }
    
    /**
     * log方法嵌入二维码中
     */
    private static void insertImage(BufferedImage source, String imgPath, boolean needCompress) throws Exception {
       File file = new File(imgPath);
       if (!file.exists()) {
           log.error("" + imgPath + "   该文件不存在!");
           return;
       }
       Image src = ImageIO.read(new File(imgPath));
       int width = src.getWidth(null);
       int height = src.getHeight(null);
       // 压缩LOGO
       if (needCompress) {
           if (width > WIDTH) {
               width = WIDTH;
           }
           if (height > HEIGHT) {
               height = HEIGHT;
           }
           Image image = src.getScaledInstance(width, height, Image.SCALE_SMOOTH);
           BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
           Graphics g = tag.getGraphics();
           // 绘制缩小后的图
           g.drawImage(image, 0, 0, null);
           g.dispose();
           src = image;
       }
       // 插入LOGO
       Graphics2D graph = source.createGraphics();
       int x = (QRCODE_SIZE - width) / 2;
       int y = (QRCODE_SIZE - height) / 2;
       graph.drawImage(src, x, y, width, height, null);
       Shape shape = new RoundRectangle2D.Float(x, y, width, width, 6, 6);
       graph.setStroke(new BasicStroke(3f));
       graph.draw(shape);
       graph.dispose();
    }
    

    上面的方法就将二维码图片显示到网页

    说明:
    在实际项目中,二维码往往都与微信或支付宝挂钩,而与它们挂钩的话链接必然很长,太长的链接会降低二维码的识别速度以及识别率,所以要将它们转换成短链接。常用的缩短网址接口有百度的,新浪的,百度的关闭了,我看了,针对企业的,不用说大家都明白,要钱了

    参考这个:https://cloud.tencent.com/developer/article/1174894

    长连接变成短连接方法,这个是suo.im的,不行
    需要的一个jar包

    <!-- 长链接转短链接 相关 -->
    		<dependency>
    			<groupId>org.apache.httpcomponents</groupId>
    			<artifactId>httpclient</artifactId>
    		</dependency>
    
    package com.jay.code;
    
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.util.EntityUtils;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 参考:https://cloud.tencent.com/developer/article/1174894
     * 二维码内容长链接变成段链接
     *
     * @version 0.0.1
     * @program: spring-poi-demo
     * @description: 长链接转短链接的工具类   测试无效
     * @author: huangzq
     * @create: 2020-12-01 11:39
     */
    public class ShortNetAddressUtil {
    
        public static CloseableHttpClient httpclient;
        static {
            httpclient = HttpClients.createDefault();
        }
    
        /**
         * 生成短连接信息
         */
        public static String generateShortUrl(String url) {
    
            try {
                HttpPost httpost = new HttpPost("http://suo.im/api.php");
                List<NameValuePair> params = new ArrayList<NameValuePair>();
                // 编码
                params.add(new BasicNameValuePair("format", "utf-8"));
                // 用户名称
                params.add(new BasicNameValuePair("url", url));
                httpost.setEntity(new UrlEncodedFormEntity(params, "utf-8"));
                HttpResponse response = httpclient.execute(httpost);
                String jsonStr = EntityUtils.toString(response.getEntity(), "utf-8");
                return jsonStr;
            } catch (Exception e) {
                e.printStackTrace();
                return "Error";
            }
    
        }
    
        /**
         * 测试生成短连接
         */
        public static void main(String[] args) {
            String url = generateShortUrl(
                    "https://www.baidu.com/s?wd=%E7%A0%81%E4%BA%91&rsv_spt=1&rsv_iqid=0x964c1c3500030761&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=48021271_11_hao_pg&rsv_enter=1&oq=spring%2520data%2520jpa%25E8%2587%25AA%25E5%25AE%259A%25E4%25B9%2589%25E6%2596%25B9%25E6%25B3%2595%25E8%25A7%2584%25E8%258C%2583&rsv_t=d5f86AreI8IAKjbxCKuUMFkUO6EKFeso61joDwkdQQrpLo%2BgDuuyujzyCafz%2B5gC8IMw8TR3iRoe&rsv_pq=f35da7870001b1ba&inputT=7063&rsv_sug3=74&rsv_sug1=50&rsv_sug7=100&bs=spring%20data%20jpa%E8%87%AA%E5%AE%9A%E4%B9%89%E6%96%B9%E6%B3%95%E8%A7%84%E8%8C%83");
            System.out.println(url);
        }
    
    }
    
    

    百度的长连接变成短连接,我测试失败,给企业用了,私用要钱了
    需要的jar包

    <!--gson-->
    		<dependency>
    			<groupId>com.google.code.gson</groupId>
    			<artifactId>gson</artifactId>
    			<version>2.6</version>
    			<!--<scope>compile</scope>-->
    		</dependency>
    
    package com.jay.code;
    
    import com.google.gson.Gson;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    /**
     * @version 0.0.1
     *
     * https://blog.csdn.net/chengshi2248/article/details/100784703
     *
     * 这个工具类用来将长链接转换成短链接。在实际项目中,二维码往往都与微信或支付宝挂钩,
     * 而与它们挂钩的话链接必然很长,太长的链接会降低二维码的识别速度以及识别率,
     * 所以要将它们转换成短链接。常用的缩短网址接口有百度的,新浪的
     *
     * @program: spring-poi-demo
     * @description: 百度短网址生成接口  ,现在不开放了,只对企业开发
     * @author: huangzq
     * @create: 2020-12-01 11:46
     */
    public class BaiduDwz {
        final static String CREATE_API = "https://dwz.cn/admin/v2/create";
        // TODO:设置Token
        final static String TOKEN = "你的token";
    
        /**
         * 创建短网址
         *
         * @param longUrl
         *            长网址:即原网址
         * @return  成功:短网址
         *          失败:返回对于的错误信息
         */
        public static String createShortUrl(String longUrl) {
            String params = "{\"url\":\""+ longUrl + "\"}";
            String msg=null;
            BufferedReader reader = null;
            try {
                // 创建连接
                URL url = new URL(CREATE_API);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setDoOutput(true);
                connection.setDoInput(true);
                connection.setUseCaches(false);
                connection.setInstanceFollowRedirects(true);
                // 设置请求方式
                connection.setRequestMethod("POST");
                // 设置发送数据的格式
                connection.setRequestProperty("Content-Type", "application/json");
                // 设置发送数据的格式");
                connection.setRequestProperty("Token", TOKEN);
                // 发起请求
                connection.connect();
                // utf-8编码
                OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");
                out.append(params);
                out.flush();
                out.close();
    
                // 读取响应
                reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
                String line;
                String res = "";
                while ((line = reader.readLine()) != null) {
                    res += line;
                }
                reader.close();
    
                // 利用gson将字符串转换成对象
                UrlResponse urlResponse = new Gson().fromJson(res, UrlResponse.class);
                if (urlResponse.getCode() == 0) {
                    msg = urlResponse.getShortUrl();
                } else {
                    //循环输出值
                    for (StatusCodeEnum e : StatusCodeEnum.values()) {
                        if (urlResponse.getCode().equals(e.getCode()) ){
                            msg =e.getMessage();
                        }
                    }
    
                }
    
                //return ""; // TODO:自定义错误信息
    
            } catch (IOException e) {
                // TODO
                e.printStackTrace();
            }
            //return ""; // TODO:自定义错误信息
            return msg;
        }
    
        public static void main(String[] args) {
            String res = createShortUrl("http://news.cctv.com/2019/05/30/ARTIKUzYcEgVHC4KFr2pbNo9190530.shtml");
            // https://dwz.cn/1xgMBFRV
            System.out.println(res);
    
        }
    }
    
    

    相关的类

    package com.jay.code;
    
    /**
     * @version 0.0.1
     * @program: spring-poi-demo
     * @description:
     * @author: huangzq
     * @create: 2020-12-01 11:52
     */
    public enum  StatusCodeEnum {
    
        // 0:正常返回短网址  -1:短网址生成失败 -2:长网址不合法  -3:长网址存在安全隐患 -4:长网址插入数据库失败 -5:长网址在黑名单中,不允许注册
        NORMAl(0,"正常"),
        FAIL(-1,"短网址生成失败"),
        WRONGFUL(-2,"长网址不合法"),
        NOTSAFE(-3,"长网址存在安全隐患"),
        INSERTFAIL(-4,"长网址插入数据库失败"),
        BLACKLIST(-5,"长网址在黑名单中,不允许注册");
    
    
        private Integer code;
    
        private String message;
    
    
    
        public Integer getCode() {
            return code;
        }
    
        public String getMessage() {
            return message;
        }
    
        StatusCodeEnum(Integer code, String message) {
            this.code = code;
            this.message = message;
        }
    
    }
    
    
    package com.jay.code;
    
    import lombok.Data;
    
    /**
     * @version 0.0.1
     * @program: spring-poi-demo
     * @description:
     * @author: huangzq
     * @create: 2020-12-01 11:50
     */
    @Data
    public class UrlResponse {
    
        private Integer code;
    
        private String shortUrl;
    }
    
    
    展开全文
  • 目录前言扫一扫识别二维码图片长按图片识别二维码图片生成二维码图片代码完善识别二维码图片优化小结 前言 最近在做一个关于二维码的组件,已发布,现总结下。 开发的APP所需支持的最低版本为7.0,最初的方案为扫描...
  • 使用PHP二维码生成类库PHP QR Code生成二维码思路:
  • C# 二维码生成

    2019-05-17 10:25:40
    1.winfrom 中生成二维码。 private void FrmTest_Load(object sender, EventArgs e) { string code="二维码内容"; GenByZXingNet(code); } /// <summary> /...
  • 二维码生成以及扫一扫解析二维码原理 1、生成URL,确定要通过二维码传达的信息,也就是通过扫一扫可以获得地址和数据信息 1、// 得到随机数,用随机数得到签名,签名验证身份 String ranString = ...
  • c# .net 二维码生成

    2012-10-22 13:01:54
    网页自动生成二维码,附源代码,很全面网页自动生成二维码,附源代码,很全面
  • 二维码生成和扫描器

    2017-11-12 16:45:47
    生成和扫描二维码,qt5做的,包含libqr和QZXing库,无论需要源码还是库都可以下载,如果.pro打开失败就可以用自己的qt生成,再拷贝源码。QT版本问题应该不是问题
  • 二维码生成扫瞄

    2019-01-21 02:02:44
    二维码 加库:coremedia corevido ,quartcore. avf. libicon Privacy - Camera Usage Description #import “ViewController.h” #import “libqrencode/QRCodeGenerator.h” #import “ZBarSDK/Headers/ZBarSDK/...
  • iOS 原生的二维码识别非常之棒,反正比 ZXing 和 ZBar 效果都好些,所以以后打算尽量用原生的二维码识别,然后最近把原生的二维码生成也顺便做了一遍,并且在原有基础上加了一些样式参数,封了一个小库方便以后使用...
  • 二维码生成工具类

    2021-03-29 14:52:47
    二维码生成工具类 import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; import ...
  • 文章目录二维码与一维码二维码编解码库二维码生成Libqrencode(QRencode)二维码生成二维码识别QZXing二维码识别QZXing编译QT调用QZXing 二维码(QR Code)是用某种特定的几何图形按一定规律在平面(二维方向)分布的...
  • 调用_makeCode()生成二维码时,常常碰到生成失败,方法不存在的错,这是因为组件还没有加载完成。碰到这种问题时,loadMake 这个属性就很管用了,组件加载后,会立即生成二维码展示了。 下面是 我的代码。 <tki-...
  • Python二维码生成器qrcode库入门 qrcode是二维码生成的Python开源库,官方地址为python-qrcode 文章目录Python二维码生成器qrcode库入门1 简介2 用法2.1 基础使用2.1.1 命令行使用2.1.2 Python接口2.1.3 二维码解析...
  • PHP批量生成带底部编号二维码(二维码生成+文字生成图片+图片拼接合并) 需求: 输入编号如 : cb05-0000001 至 cb05-0000500 批量生成 以编号为名称的下图二维码,然后压缩并下载 思路: phpqrcode 生成 二维码 --&...
  • Java实现二维码生成的方法 朱开心 1、支持QRcode、ZXing 二维码生成、解析; package com.thinkgem.jeesite.test; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import ...
  • 随着扫一扫的流行,二维码也开始变得非常的火热,本篇文章就用最近比较流行的zxing来做一个属于自己的二维码生成器。当然这个这个比较简单,抛砖引玉。如果大家还希望看二维码细节,请参考陈皓大神的这篇文章二维码...
  • 二维码生成报错

    2017-03-25 17:16:20
    生成二维码是在国网通的投影仪上面包了这个错误,可是在天猫的盒子上却没有报错。查了一下也不知道什么错,有谁遇到这种问题吗?
  • 最近项目有个需求:生成含有二维码的PDF报表拿去盖章,盖完章后拿去扫描到某个文件夹,然后通过Java识别扫描文件的二维码 网上找了好多文章,识别率都不高,最后找到一遍ZXing二维码解析生成类,主要完善了一下解析...
  • 二维码生成和扫描器2

    2017-11-13 00:06:01
    生成和扫描二维码,qt5做的,包含libqr和QZXing库,无论需要源码还是库都可以下载,如果.pro打开失败就可以用自己的qt生成,再拷贝源码。QT版本问题应该不是问题

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,367
精华内容 6,146
关键字:

二维码生成失败原因