FileUploadUtil.java 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. package com.kmall.common.utils.file;
  2. import com.kmall.common.fileserver.util.FileManager;
  3. import com.kmall.common.utils.R;
  4. import org.apache.commons.fileupload.FileItem;
  5. import org.apache.commons.fileupload.disk.DiskFileItem;
  6. import org.apache.commons.io.IOUtils;
  7. import org.apache.http.HttpResponse;
  8. import org.apache.http.client.methods.HttpPost;
  9. import org.apache.http.entity.StringEntity;
  10. import org.apache.http.impl.client.CloseableHttpClient;
  11. import org.apache.http.impl.client.HttpClientBuilder;
  12. import org.apache.http.protocol.HTTP;
  13. import org.springframework.web.multipart.MultipartFile;
  14. import org.springframework.web.multipart.commons.CommonsMultipartFile;
  15. import javax.imageio.IIOImage;
  16. import javax.imageio.ImageIO;
  17. import javax.imageio.ImageWriteParam;
  18. import javax.imageio.ImageWriter;
  19. import java.awt.image.BufferedImage;
  20. import java.awt.image.ColorModel;
  21. import java.io.*;
  22. import java.nio.file.Files;
  23. /**
  24. * @author huangyq
  25. * @version 1.0
  26. * 2019-04-29 14:50
  27. */
  28. public class FileUploadUtil {
  29. public static String getUploadUrl(String mapToXml, String token, Integer id){
  30. try {
  31. CloseableHttpClient httpClient = HttpClientBuilder.create().build();
  32. HttpPost httpPost = new HttpPost("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+ token);
  33. httpPost.addHeader(HTTP.CONTENT_TYPE, "application/json");
  34. StringEntity entity = new StringEntity(mapToXml);
  35. entity.setContentType("image/png");
  36. httpPost.setEntity(entity);
  37. HttpResponse response = httpClient.execute(httpPost);
  38. InputStream inputStream = response.getEntity().getContent();
  39. String fileName = System.currentTimeMillis() + "_" + id +".png";
  40. String dirName = "\\upload";
  41. File dirFile = new File(dirName);
  42. //删除之前的图片文件夹
  43. deleteFile(dirFile);
  44. if(!dirFile.exists()){
  45. dirFile.mkdirs();
  46. }
  47. File file = new File(dirName, fileName);// 可以是任何图片格式.jpg,.png等
  48. FileOutputStream fos = new FileOutputStream(file);
  49. if (inputStream != null) {
  50. try {
  51. byte[] b = new byte[1024];
  52. int nRead = 0;
  53. while ((nRead = inputStream.read(b)) != -1) {
  54. fos.write(b, 0, nRead);
  55. }
  56. } catch (Exception e) {
  57. e.printStackTrace();
  58. } finally {
  59. try {
  60. fos.flush();
  61. fos.close();
  62. } catch (IOException e) {
  63. e.printStackTrace();
  64. }
  65. }
  66. }
  67. FileItem fileItem = new DiskFileItem("mainFile", Files.probeContentType(file.toPath()), false,
  68. file.getName(), (int) file.length(), file.getParentFile());
  69. try (InputStream input = new FileInputStream(file); OutputStream os = fileItem.getOutputStream();) {
  70. IOUtils.copy(input, os);
  71. MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
  72. String url = FileManager.upload(multipartFile);
  73. // compressPic(url, url);
  74. return url;
  75. }
  76. }catch (Exception e){
  77. e.printStackTrace();
  78. }
  79. return "";
  80. }
  81. public static boolean compressPic(String srcFilePath, String descFilePath) throws IOException {
  82. File file = null;
  83. BufferedImage src = null;
  84. FileOutputStream out = null;
  85. ImageWriter imgWrier;
  86. ImageWriteParam imgWriteParams;
  87. // 指定写图片的方式为 jpg
  88. imgWrier = ImageIO.getImageWritersByFormatName("jpg").next();
  89. imgWriteParams = new javax.imageio.plugins.jpeg.JPEGImageWriteParam(
  90. null);
  91. // 要使用压缩,必须指定压缩方式为MODE_EXPLICIT
  92. imgWriteParams.setCompressionMode(imgWriteParams.MODE_EXPLICIT);
  93. // 这里指定压缩的程度,参数qality是取值0~1范围内,
  94. imgWriteParams.setCompressionQuality((float)1);
  95. imgWriteParams.setProgressiveMode(imgWriteParams.MODE_DISABLED);
  96. ColorModel colorModel = ImageIO.read(new File(srcFilePath)).getColorModel();// ColorModel.getRGBdefault();
  97. // 指定压缩时使用的色彩模式
  98. // imgWriteParams.setDestinationType(new javax.imageio.ImageTypeSpecifier(
  99. // colorModel, colorModel.createCompatibleSampleModel(16, 16)));
  100. imgWriteParams.setDestinationType(new javax.imageio.ImageTypeSpecifier(
  101. colorModel, colorModel.createCompatibleSampleModel(16, 16)));
  102. try {
  103. if (isBlank(srcFilePath)) {
  104. return false;
  105. } else {
  106. file = new File(srcFilePath);
  107. System.out.println(file.length());
  108. src = ImageIO.read(file);
  109. out = new FileOutputStream(descFilePath);
  110. imgWrier.reset();
  111. // 必须先指定 out值,才能调用write方法, ImageOutputStream可以通过任何
  112. // OutputStream构造
  113. imgWrier.setOutput(ImageIO.createImageOutputStream(out));
  114. // 调用write方法,就可以向输入流写图片
  115. imgWrier.write(null, new IIOImage(src, null, null),
  116. imgWriteParams);
  117. out.flush();
  118. out.close();
  119. }
  120. } catch (Exception e) {
  121. e.printStackTrace();
  122. return false;
  123. }
  124. return true;
  125. }
  126. public static boolean isBlank(String string) {
  127. if (string == null || string.length() == 0 || string.trim().equals("")) {
  128. return true;
  129. }
  130. return false;
  131. }
  132. private static void deleteFile(File dirFile){
  133. if(dirFile.exists()){
  134. if(dirFile.isFile()){
  135. dirFile.delete();
  136. }else {
  137. for(File file:dirFile.listFiles()){
  138. deleteFile(file);
  139. }
  140. }
  141. }
  142. }
  143. }