日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

简单的二维码生成接口,自动生成二维码,返回图片地址

發(fā)布時(shí)間:2024/1/1 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简单的二维码生成接口,自动生成二维码,返回图片地址 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

自動(dòng)生成二維碼,返回圖片地址

本來(lái)不想寫(xiě)的,但是怕太久不寫(xiě)這個(gè)東西,就要荒廢了,就先記錄一下簡(jiǎn)單的東西
這里因?yàn)?返回地址的時(shí)候,通過(guò)了nginx ,我試了很多方法都抓取不到對(duì)應(yīng)的IP地址,
就在nginx配置了一個(gè)地址,放在head里面了
接口里面直接可以用HttpServletRequest.getHead("") 抓取到地址,地址當(dāng)然是寫(xiě)死的,
部署在什么ip上 就改成什么ip
希望有大神可以幫我解決這個(gè)問(wèn)題

下面就先貼個(gè)代碼吧

我們是java端,所以需要引這兩個(gè)

<dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.2.1</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.2.1</version></dependency>

service 層

import javax.servlet.http.HttpServletRequest; import java.io.IOException;/*** @ClassName QRCodeService* @Description **** @uthor **** @Date **** @Version 1.0*/ public interface QRCodeService {//自動(dòng)生成二維碼,返回圖片地址String crateQRCode(String content, int width, int height,HttpServletRequest request) throws IOException; }

impl層

import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import lb.modular.service.QRCodeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import lb.modular.file.PreReadUploadConfig;import javax.imageio.ImageIO; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.HashMap; import java.util.UUID;import org.apache.commons.codec.binary.Base64;import org.springframework.util.StringUtils; import sun.misc.BASE64Decoder;/*** @ClassName QRCodeServiceImpl* @Description his* @uthor **** @Date **** @Version 1.0*/ @Service @Transactional public class QRCodeServiceImpl implements QRCodeService {@Autowiredprivate PreReadUploadConfig PreReadUploadConfig;@Overridepublic String crateQRCode(String content, int width, int height, HttpServletRequest request) throws IOException {String content1= String.valueOf(content);String resultImage = "";if (!StringUtils.isEmpty(content1)) {ServletOutputStream stream = null;ByteArrayOutputStream os = new ByteArrayOutputStream();@SuppressWarnings("rawtypes")HashMap<EncodeHintType, Comparable> hints = new HashMap<>();hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); // 指定字符編碼為“utf-8”hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); // 指定二維碼的糾錯(cuò)等級(jí)為中級(jí)hints.put(EncodeHintType.MARGIN, 2); // 設(shè)置圖片的邊距String uuidrandom= String.valueOf(UUID.randomUUID());try {QRCodeWriter writer = new QRCodeWriter();BitMatrix bitMatrix = writer.encode(content1, BarcodeFormat.QR_CODE, width, height, hints);BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix);ImageIO.write(bufferedImage, "png", os);/*** 原生轉(zhuǎn)碼前面沒(méi)有 data:image/png;base64 這些字段,返回給前端是無(wú)法被解析,可以讓前端加,也可以在下面加上*/ // byte[] bytes = os.toByteArray();resultImage = new String(Base64.encodeBase64(os.toByteArray()));String str =resultImage; // System.out.println(":"+str);BASE64Decoder decoder = new BASE64Decoder(); // String ipAddr ="";try {File file = new File(PreReadUploadConfig.getUploadPath());if(!file.exists()){file.mkdirs();} // ipAddr = getIpAddr(request);FileOutputStream write = new FileOutputStream(PreReadUploadConfig.getUploadPath()+ uuidrandom+".png");byte[] decodeBytes = decoder.decodeBuffer(str);write.write(decodeBytes);write.flush();write.close();}catch (IOException e) {e.printStackTrace();}//zxingIpAddr//獲取jar地址 例如:10.0.0.120:8089/lb/String basePath = request.getScheme() + "://" + request.getHeader("zxingIpAddr") + request.getContextPath();//獲取服務(wù)器地址//拼接上反射地址以及圖片名稱(chēng)String url = basePath+"/static/" + uuidrandom+".png";return url;} catch (Exception e) {e.printStackTrace();} finally {if (stream != null) {stream.flush();stream.close();}}}return null;}}

在這里的Base64 用的不是很好,但是暫時(shí)沒(méi)有找到替換的,有辦法的希望可以告訴我

這里生成完二維碼之后,一般都是沒(méi)有辦法調(diào)用的 ,除了本地

這里需要做一個(gè)反射

路徑DTO

import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component;/*** @ClassName PreReadUploadConfig* @Description **** @uthor **** @Date **** @Version 1.0*/ @Component @ConfigurationProperties(prefix="preread") public class PreReadUploadConfig {//上傳路徑private String uploadPath;public String getUploadPath() {return uploadPath;}public void setUploadPath(String uploadPath) {this.uploadPath = uploadPath;}}

這里是Springboot 項(xiàng)目,所以在yml文件內(nèi)配置一下就好了

preread:#文件上傳目錄(注意Linux和Windows上的目錄結(jié)構(gòu)不同)#Linux 上路徑: /usr/java/imgs/#windows上路徑: D:/test/uploadPath: C:/test/ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;/*** @ClassName WebConfigurer* @Description his項(xiàng)目* @uthor zhangxubin* @Date 2019/6/17 11:12* @Version 1.0*/ @ComponentScan @Configuration public class WebConfigurer extends WebMvcConfigurerAdapter {@AutowiredPreReadUploadConfig uploadConfig;@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {// /static/ 可以替換任意registry.addResourceHandler("/static/**").addResourceLocations("file:///"+uploadConfig.getUploadPath());}}

這樣就可以把yml文件內(nèi)配置的路徑反射出來(lái)

最近感覺(jué)比較亂,也寫(xiě)不出啥東西,就這樣吧

差點(diǎn)忘記nginx配置了

在這里投機(jī)了,因?yàn)闆](méi)找到方法可以抓取到IP以及端口號(hào),我這里就直接寫(xiě)死放在頭信息里面了

總結(jié)

以上是生活随笔為你收集整理的简单的二维码生成接口,自动生成二维码,返回图片地址的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。