| | |
| | | import com.google.zxing.WriterException; |
| | | import com.google.zxing.common.BitMatrix; |
| | | import com.google.zxing.qrcode.QRCodeWriter; |
| | | import com.ruoyi.system.api.util.HuaWeiOBSUtil; |
| | | import java.io.ByteArrayInputStream; |
| | | import java.io.ByteArrayOutputStream; |
| | | import java.io.IOException; |
| | | import java.io.InputStream; |
| | | import java.io.OutputStream; |
| | | import java.util.Base64; |
| | | import java.util.HashMap; |
| | | import org.apache.commons.fileupload.FileItem; |
| | | import org.apache.commons.fileupload.FileItemFactory; |
| | | import org.apache.commons.fileupload.disk.DiskFileItemFactory; |
| | | import org.springframework.http.MediaType; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | import org.springframework.web.multipart.commons.CommonsMultipartFile; |
| | | |
| | | public class CreateQrCode { |
| | | |
| | | private static final String base64Url = "data:image/png;base64,"; |
| | | |
| | | /** |
| | | * 创建二维码 |
| | | * |
| | |
| | | * @throws IOException |
| | | * @throws WriterException |
| | | */ |
| | | public static String createQRCodeToObs(String json) throws IOException, WriterException { |
| | | public static MultipartFile createQRCodeStream(String json) |
| | | throws IOException, WriterException { |
| | | QRCodeWriter qrCodeWriter = new QRCodeWriter(); |
| | | |
| | | HashMap<EncodeHintType, Object> hints = new HashMap<>(); |
| | |
| | | BitMatrix bitMatrix = qrCodeWriter.encode(json, BarcodeFormat.QR_CODE, 600, 600, hints); |
| | | ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); |
| | | MatrixToImageWriter.writeToStream(bitMatrix, "PNG", outputStream); |
| | | InputStream is = new ByteArrayInputStream( |
| | | InputStream byteArrayInputStream = new ByteArrayInputStream( |
| | | outputStream.toByteArray()); |
| | | return HuaWeiOBSUtil.obsUploadStream(json, is); |
| | | // byteArrayInputStream 转MultipartFile |
| | | |
| | | return getMultipartFile(byteArrayInputStream, json + ".png"); |
| | | } |
| | | |
| | | public static void main(String[] args) throws IOException, WriterException { |
| | | String qrCodeToObs = createQRCodeToObs("123456"); |
| | | System.out.println(qrCodeToObs); |
| | | /** |
| | | * 获取封装得MultipartFile |
| | | * |
| | | * @param inputStream inputStream |
| | | * @param fileName fileName |
| | | * @return MultipartFile |
| | | */ |
| | | public static MultipartFile getMultipartFile(InputStream inputStream, String fileName) { |
| | | FileItem fileItem = createFileItem(inputStream, fileName); |
| | | // CommonsMultipartFile是feign对multipartFile的封装,但是要FileItem类对象 |
| | | return new CommonsMultipartFile(fileItem); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * FileItem类对象创建 |
| | | * |
| | | * @param inputStream inputStream |
| | | * @param fileName fileName |
| | | * @return FileItem |
| | | */ |
| | | public static FileItem createFileItem(InputStream inputStream, String fileName) { |
| | | FileItemFactory factory = new DiskFileItemFactory(16, null); |
| | | String textFieldName = "file"; |
| | | FileItem item = factory.createItem(textFieldName, MediaType.MULTIPART_FORM_DATA_VALUE, true, |
| | | fileName); |
| | | int bytesRead = 0; |
| | | byte[] buffer = new byte[10 * 1024 * 1024]; |
| | | OutputStream os = null; |
| | | // 使用输出流输出输入流的字节 |
| | | try { |
| | | os = item.getOutputStream(); |
| | | while ((bytesRead = inputStream.read(buffer, 0, 8192)) != -1) { |
| | | os.write(buffer, 0, bytesRead); |
| | | } |
| | | inputStream.close(); |
| | | } catch (IOException e) { |
| | | throw new RuntimeException(e); |
| | | } finally { |
| | | if (os != null) { |
| | | try { |
| | | os.close(); |
| | | } catch (IOException e) { |
| | | throw new RuntimeException(e); |
| | | |
| | | } |
| | | } |
| | | if (inputStream != null) { |
| | | try { |
| | | inputStream.close(); |
| | | } catch (IOException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | } |
| | | } |
| | | |
| | | return item; |
| | | } |
| | | } |