FileUploadUtil.java 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552
  1. package me.zhengjie.appapi.util;
  2. import java.io.ByteArrayInputStream;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.util.Iterator;
  8. import javax.imageio.ImageIO;
  9. import javax.imageio.ImageReader;
  10. import javax.imageio.stream.ImageInputStream;
  11. import org.apache.commons.codec.binary.Base64;
  12. import org.apache.commons.io.FileUtils;
  13. import org.apache.commons.lang3.StringUtils;
  14. import org.springframework.boot.web.server.WebServerException;
  15. import org.springframework.web.multipart.MultipartFile;
  16. import cn.hutool.core.io.IoUtil;
  17. import lombok.extern.slf4j.Slf4j;
  18. import me.zhengjie.appapi.config.AppConfigInfo;
  19. import me.zhengjie.appapi.util.StatusEnum.StepStatusEnum;
  20. import me.zhengjie.appapi.vo.FileUploadVo;
  21. import me.zhengjie.appapi.vo.FileVo;
  22. import me.zhengjie.appapi.vo.ImageUploadVo;
  23. import me.zhengjie.modules.file.FileHandle;
  24. import me.zhengjie.modules.file.FileHandleVo;
  25. /**
  26. * 将图片转换为Base64<br>
  27. * 将base64编码字符串解码成img图片
  28. *
  29. * @创建时间 2015-06-01 15:50
  30. *
  31. */
  32. @Slf4j
  33. public class FileUploadUtil {
  34. private static FileHandle fileHandle;
  35. public static void setFileHandle(FileHandle fileHandle) {
  36. FileUploadUtil.fileHandle = fileHandle;
  37. }
  38. public static void main(String[] args) {
  39. // String imgFile = "E:\\demo\\image\\1.png";// 待处理的图片
  40. // String imgfString = "data:image/png;base64,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AEiCIQAAAACQBEMAAAAAIAmGAAAAAEASDAEAAACAJBgCAAAAAEkwBAAAAACSYAgAAAAAJMEQAAAAAEiCIQAAAACQBEMAAAAAIAmGAAAAAEASDAEAAACAJBgCAAAAAEkwBAAAAACSYAgAAAAAJMEQAAAAAEiCIQAAAACQBEMAAAAAIAmGAAAAAEASDAEAAACAJBgCAAAAAEkwBAAAAACSYAgAAAAAJMEQAAAAAEiCIQAAAACQBEMAAAAAIAmGAAAAAEASDAEAAACAJBgCAAAAAEkwBAAAAACSYAgAAAAAJMEQAAAAAEiCIQAAAACQBEMAAAAAIAmGAAAAAEASDAEAAACAJBgCAAAAAEkwBAAAAACSYAgAAAAAJMEQAAAAAEiCIQAAAACQBEMAAAAAIAmGAAAAAEASDAEAAACAJBgCAAAAAEkwBAAAAACSYAgAAAAAJMEQAAAAAEiCIQAAAACQBEMAAAAAIAmGAAAAAEASDAEAAACAJBgCAAAAAEkwBAAAAACSYAgAAAAAJMEQAAAAAEiCIQAAAACQBEMAAAAAIAmGAAAAAEASDAEAAACAJBgCAAAAAEkwBAAAAACSYAgAAAAAJMEQAAAAAEiCIQAAAACQBEMAAAAAIAmGAAAAAEASDAEAAACAJBgCAAAAAEkwBAAAAACSYAgAAAAAJMEQAAAAAEiCIQAAAACQBEMAAAAAIAmGAAAAAEASDAEAAACAJBgCAAAAAEkwBAAAAACSYAgAAAAAJMEQAAAAAEiCIQAAAACQBEMAAAAAIAmGAAAAAEASDAEAAACAJBgCAAAAAEkwBAAAAACSYAgAAAAAJMEQAAAAAEiCIQAAAACQBEMAAAAAIAmGAAAAAEASDAEAAACAJBgCAAAAAEkwBAAAAACSYAgAAAAAJMEQAAAAAEiCIQAAAACQBEMAAAAAIAmGAAAAAEASDAEAAACAJBgCAAAAAEkwBAAAAACSYAgAAAAAJMEQAAAAAEiCIQAAAACQBEMAAAAAIAmGAAAAAEASDAEAAACAqpT/B7udZ7SxvT30AAAAAElFTkSuQmCC";
  41. // System.out.println(imgfString.length());
  42. // ImageUploadVo image;
  43. // saveImage(imgfString, "E:\\demo\\image\\");
  44. // String imgbese = getImgStr(imgFile);
  45. // System.out.println(imgbese.length());
  46. //// System.out.println(imgbese);
  47. // String imgFilePath = "E:\\demo\\image\\332.png";// 新生成的图片
  48. // generateImage(imgfString, imgFilePath);
  49. }
  50. /**
  51. * 将图片转换成Base64编码
  52. *
  53. * @param imgFile 待处理图片
  54. * @return
  55. */
  56. public static String getImgStr(String imgFile) {
  57. // 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
  58. byte[] data = null;
  59. // 读取图片字节数组
  60. try {
  61. // 把文件读取到字节数组里面
  62. data = FileUtils.readFileToByteArray(new File(imgFile));
  63. } catch (IOException e) {
  64. e.printStackTrace();
  65. }
  66. return new String(Base64.encodeBase64(data));
  67. }
  68. /**
  69. * 对字节数组字符串进行Base64解码并生成图片,注意处理图片前面是否加了data:image/png;这个
  70. *
  71. * @param imgStr 图片数据
  72. * @param imgFilePath 保存图片全路径地址
  73. * @return
  74. */
  75. public static String saveImage(ImageUploadVo image) {
  76. //
  77. String imgStr = image.getBase64();
  78. if (imgStr == null) // 图像数据为空
  79. return null;
  80. try {
  81. String suffix = imageFileSuffix(imgStr);
  82. if (StringUtils.isNotEmpty(suffix)) {
  83. // 去掉data:image/jpeg;这种类型的
  84. String[] base64Prefix = imgStr.split("base64,");
  85. if (base64Prefix != null && base64Prefix.length > 1) {
  86. imgStr = base64Prefix[1];
  87. }
  88. }
  89. // Base64解码
  90. byte[] b = Base64.decodeBase64(imgStr);
  91. for (int i = 0; i < b.length; ++i) {
  92. if (b[i] < 0) {// 调整异常数据
  93. b[i] += 256;
  94. }
  95. }
  96. if (StringUtils.isEmpty(suffix)) {
  97. suffix = getFormatName(b);
  98. }
  99. // TODO 这里再判断,通过二进制,如果还是失败抛出异常,
  100. // 通过类型上传文件到指定路径
  101. String step = image.getStep();
  102. String orderType = StepStatusEnum.getType(Integer.valueOf(step));
  103. // 如果不存在,创建文件夹
  104. String uuid = UUIDGenerator.uuid();
  105. // 拼接文件路径
  106. String fileName = uuid + "_" + image.getFileType() + "." + suffix;
  107. // 图片的路径
  108. String imagePath = image.getBusinessNo() + "/" + orderType + "/" + fileName;
  109. // 这里目前只会说图片的
  110. String contentType = "image/" + suffix;
  111. uploadFile(imagePath, contentType, b);
  112. // FileUtils.writeByteArrayToFile(fullPath, b);
  113. return imagePath;
  114. } catch (Exception e) {
  115. log.error("上传图片失败:" + e.getLocalizedMessage());
  116. return null;
  117. }
  118. }
  119. public static String uploadFile(FileUploadVo file, MultipartFile partFile) {
  120. if (file.getFileUpload() == null) {
  121. return null;
  122. }
  123. String uploadFileName = partFile.getOriginalFilename();
  124. // 拼接文件路径
  125. String uuid = UUIDGenerator.uuid();
  126. String step = file.getStep();
  127. String orderType = StepStatusEnum.getType(Integer.valueOf(step));
  128. // 得到文件后缀
  129. int index = uploadFileName.lastIndexOf(".");
  130. String suffix = uploadFileName.substring(index + 1);
  131. String fileName = uuid + "_" + file.getFileType() + "." + suffix;
  132. // 通过类型上传文件到指定路径
  133. String imagePath = file.getBusinessNo() + "/" + orderType + "/" + fileName;
  134. try {
  135. // app插入的是form-data
  136. // 这里先处理图片,等后面看还有其他的类型了
  137. String contentType = "";
  138. if ("pdf".equalsIgnoreCase(suffix)) {
  139. contentType = "application/pdf";
  140. } else {
  141. contentType = "image/" + suffix;
  142. }
  143. uploadFile(imagePath, contentType, partFile.getInputStream());
  144. return imagePath;
  145. } catch (Exception e) {
  146. log.error("上传图片失败:" + e.getLocalizedMessage());
  147. return null;
  148. }
  149. }
  150. public static InputStream getInputStream(String objectName) throws Exception {
  151. return fileHandle.getObject(objectName);
  152. }
  153. /**
  154. * 获取图片类型
  155. *
  156. * @param buf 二进制图片
  157. * @return 图片类型
  158. */
  159. public static String getFormatName(byte[] buf) throws IOException {
  160. InputStream imageStream = new ByteArrayInputStream(buf);
  161. try (ImageInputStream imageInputStream = ImageIO.createImageInputStream(imageStream)) {
  162. Iterator<ImageReader> imageReadersList = ImageIO.getImageReaders(imageInputStream);
  163. if (imageReadersList.hasNext()) {
  164. ImageReader reader = imageReadersList.next();
  165. return reader.getFormatName().toLowerCase();
  166. }
  167. }
  168. return null;
  169. }
  170. /**
  171. * 这个是通过base64编码得到后缀文件
  172. *
  173. * @param base64Data
  174. * @return
  175. */
  176. public static String imageFileSuffix(String base64Data) {
  177. String dataPrix = "";
  178. String[] d = base64Data.split("base64,");
  179. if (d != null && d.length == 2) {
  180. dataPrix = d[0];
  181. }
  182. if (StringUtils.isNotBlank(dataPrix)) {
  183. String suffix = null;
  184. // data:image/jpeg;base64,base64编码的jpeg图片数据
  185. if ("data:image/jpeg;".equalsIgnoreCase(dataPrix)) {
  186. suffix = "jpeg";
  187. // data:image/x-icon;base64,base64编码的icon图片数据
  188. } else if ("data:image/jpg;".equalsIgnoreCase(dataPrix)) {
  189. suffix = "jpg";
  190. // data:image/x-icon;base64,base64编码的icon图片数据
  191. } else if ("data:image/x-icon;".equalsIgnoreCase(dataPrix)) {
  192. suffix = "ico";
  193. // data:image/gif;base64,base64编码的gif图片数据
  194. } else if ("data:image/gif;".equalsIgnoreCase(dataPrix)) {
  195. suffix = "gif";
  196. // data:image/png;base64,base64编码的png图片数据
  197. } else if ("data:image/png;".equalsIgnoreCase(dataPrix)) {
  198. suffix = "png";
  199. }
  200. return suffix;
  201. }
  202. return null;
  203. }
  204. /**
  205. * 上传文件通过文件的流
  206. *
  207. * @param filePath
  208. * @param contentType
  209. * @param input
  210. * @throws Exception
  211. */
  212. public static String upload(FileVo file) {
  213. if (file.getFile() == null) {
  214. return null;
  215. }
  216. String filePath = file.getFilePath();
  217. MultipartFile multipartFile = file.getFile();
  218. String uploadFileName = multipartFile.getOriginalFilename();
  219. // 拼接文件路径
  220. String uuid = UUIDGenerator.uuid();
  221. // 得到文件后缀
  222. int index = uploadFileName.lastIndexOf(".");
  223. String suffix = uploadFileName.substring(index);
  224. String fileName = uuid + "_" + file.getFileType() + suffix;
  225. file.setFileName(fileName);
  226. String imagePath = filePath + "/" + fileName;
  227. try {
  228. FileHandleVo fileHandlevo = new FileHandleVo();
  229. fileHandlevo.setFilePath(imagePath);
  230. fileHandlevo.setContentType(multipartFile.getContentType());
  231. fileHandlevo.setInputStream(multipartFile.getInputStream());
  232. fileHandle.uploadFileStream(fileHandlevo);
  233. return imagePath;
  234. } catch (Exception e) {
  235. log.error("上传图片失败:" + e.getLocalizedMessage());
  236. return null;
  237. }
  238. }
  239. // public static String saveHtml(String html, String businessNo) {
  240. // if (html == null) {
  241. // return null;
  242. // }
  243. // String uploadPath = AppConfigInfo.APP_UPLOAD_PATH;
  244. // // 拼接文件路径
  245. // String fileName = UUIDGenerator.uuid() + ".html";
  246. // String imagePath = "no" + businessNo + "/" + fileName;
  247. // String filePath = uploadPath + imagePath;
  248. // try {
  249. // // File file, String data, Charset charset
  250. // FileUtils.writeStringToFile(new File(filePath), html, "UTF-8");
  251. // return imagePath;
  252. // } catch (IOException e) {
  253. // log.info("上传图片失败:" + e.getLocalizedMessage());
  254. // return null;
  255. // }
  256. // }
  257. public static String saveHtml(String html, String businessNo, String orderId) {
  258. if (html == null) {
  259. return null;
  260. }
  261. // 拼接文件路径
  262. String fileName = UUIDGenerator.uuid() + ".html";
  263. String filePath = businessNo + "/" + StepStatusEnum.getType(orderId) + "/" + fileName;
  264. try {
  265. ByteArrayInputStream bis = new ByteArrayInputStream(html.getBytes("UTF-8"));
  266. // File file, String data, Charset charset
  267. FileHandleVo fileHandlevo = new FileHandleVo();
  268. fileHandlevo.setFilePath(filePath);
  269. fileHandlevo.setContentType("text/html");
  270. fileHandlevo.setInputStream(bis);
  271. fileHandle.uploadFileStream(fileHandlevo);
  272. bis.close();
  273. return filePath;
  274. } catch (Exception e) {
  275. log.error("上传图片失败:" + e.getLocalizedMessage());
  276. return null;
  277. }
  278. }
  279. public static String saveHtml(String filePath, String html) {
  280. if (html == null) {
  281. return null;
  282. }
  283. // 拼接文件路径
  284. try {
  285. ByteArrayInputStream bis = new ByteArrayInputStream(html.getBytes("UTF-8"));
  286. // File file, String data, Charset charset
  287. FileHandleVo fileHandlevo = new FileHandleVo();
  288. fileHandlevo.setFilePath(filePath);
  289. fileHandlevo.setContentType("text/html");
  290. fileHandlevo.setInputStream(bis);
  291. fileHandle.uploadFileStream(fileHandlevo);
  292. bis.close();
  293. return filePath;
  294. } catch (Exception e) {
  295. log.error("上传图片失败:" + e.getLocalizedMessage());
  296. return null;
  297. }
  298. }
  299. /**
  300. * 上传文件通过文件的流
  301. *
  302. * @param filePath
  303. * @param contentType
  304. * @param input
  305. * @throws Exception
  306. */
  307. public static void uploadFile(String filePath, String contentType, InputStream inputSteam) throws Exception {
  308. ByteArrayInputStream bis = null;
  309. try {
  310. // 这里的inputSteam已经关闭了
  311. byte[] b = IoUtil.readBytes(inputSteam);
  312. // 将b转成inputstream
  313. bis = IoUtil.toStream(b);
  314. FileHandleVo fileHandlevo = new FileHandleVo();
  315. fileHandlevo.setFilePath(filePath);
  316. fileHandlevo.setContentType(contentType);
  317. fileHandlevo.setInputStream(bis);
  318. fileHandle.uploadFileStream(fileHandlevo);
  319. } finally {
  320. // 关闭流
  321. if (bis != null) {
  322. bis.close();
  323. }
  324. }
  325. }
  326. /**
  327. * 上传文件通过文件的流
  328. *
  329. * @param filePath
  330. * @param contentType
  331. * @param input
  332. * @throws Exception
  333. */
  334. public static void uploadFile(String filePath, String contentType, byte[] b) throws Exception {
  335. ByteArrayInputStream bis = null;
  336. try {
  337. // 这里的inputSteam已经关闭了
  338. // 将b转成inputstream
  339. bis = IoUtil.toStream(b);
  340. FileHandleVo fileHandlevo = new FileHandleVo();
  341. fileHandlevo.setFilePath(filePath);
  342. fileHandlevo.setContentType(contentType);
  343. fileHandlevo.setInputStream(bis);
  344. fileHandle.uploadFileStream(fileHandlevo);
  345. } finally {
  346. // 关闭流
  347. if (bis != null) {
  348. bis.close();
  349. }
  350. }
  351. }
  352. // public static String savePdf(String html, String businessNo) {
  353. // if (html == null) {
  354. // return null;
  355. // }
  356. //
  357. // String uploadPath = AppConfigInfo.APP_UPLOAD_PATH;
  358. // // 拼接文件路径
  359. // String fileName = UUIDGenerator.uuid() + ".pdf";
  360. // String path = "no" + businessNo + "/" + fileName;
  361. // String filePath = uploadPath + path;
  362. // try {
  363. // // File file, String data, Charset charset
  364. // HtmlConvertPdf.createPdfFile(html, filePath);
  365. // return path;
  366. // } catch (Exception e) {
  367. // log.info("转换pdf失败:" + e.getLocalizedMessage());
  368. // return null;
  369. // }
  370. // }
  371. /**
  372. * Return the absolute temp dir for given web server.
  373. * @param prefix server name
  374. * @return the temp dir for given server.
  375. */
  376. public static String createTempDir(String temp) {
  377. try {
  378. File tempDir = File.createTempFile("eladmin",temp);
  379. tempDir.delete();
  380. tempDir.mkdir();
  381. tempDir.deleteOnExit();
  382. return tempDir.getAbsolutePath()+"/";
  383. }
  384. catch (IOException ex) {
  385. throw new WebServerException(
  386. "Unable to create tempDir. java.io.tmpdir is set to " + System.getProperty("java.io.tmpdir"), ex);
  387. }
  388. }
  389. public static String savePdf(String html, String businessNo, String orderId) {
  390. if (html == null) {
  391. return null;
  392. }
  393. String uploadPath = createTempDir("upload");
  394. // 拼接文件路径
  395. String fileName = UUIDGenerator.uuid() + ".pdf";
  396. String path = businessNo + "/" + StepStatusEnum.getType(orderId) + "/" + fileName;
  397. String sourceFilePath = uploadPath + path;
  398. InputStream inputStream = null;
  399. try {
  400. // File file, String data, Charset charset
  401. HtmlConvertPdf.createPdfFile(html, sourceFilePath);
  402. inputStream = new FileInputStream(sourceFilePath);
  403. // 这里需要把转换完成的删除掉
  404. String contentType = "application/pdf";
  405. // 通过流上传
  406. // fileHandle.uploadFilePath(path, filePath, contentType);
  407. FileHandleVo fileHandlevo = new FileHandleVo();
  408. fileHandlevo.setFilePath(path);
  409. fileHandlevo.setSourceFilePath(sourceFilePath);
  410. fileHandlevo.setContentType(contentType);
  411. fileHandlevo.setInputStream(inputStream);
  412. fileHandle.uploadFileStream(fileHandlevo);
  413. IoUtil.close(inputStream);
  414. // 这个删除文件留给具体的上传处理
  415. FileUtils.deleteQuietly(new File(sourceFilePath));
  416. return path;
  417. } catch (Exception e) {
  418. log.error("转换pdf失败:" + e.getLocalizedMessage());
  419. return null;
  420. }
  421. }
  422. public static String createPdf(String html,String pdfPath) {
  423. if (html == null) {
  424. return null;
  425. }
  426. String uploadPath = AppConfigInfo.APP_UPLOAD_PATH;
  427. String sourceFilePath = uploadPath + pdfPath;
  428. InputStream inputStream = null;
  429. try {
  430. // File file, String data, Charset charset
  431. HtmlConvertPdf.createPdfFile(html, sourceFilePath);
  432. inputStream = new FileInputStream(sourceFilePath);
  433. // 这里需要把转换完成的删除掉
  434. String contentType = "application/pdf";
  435. // 通过流上传
  436. // fileHandle.uploadFilePath(path, filePath, contentType);
  437. FileHandleVo fileHandlevo = new FileHandleVo();
  438. fileHandlevo.setFilePath(pdfPath);
  439. fileHandlevo.setSourceFilePath(sourceFilePath);
  440. fileHandlevo.setContentType(contentType);
  441. fileHandlevo.setInputStream(inputStream);
  442. fileHandle.uploadFileStream(fileHandlevo);
  443. IoUtil.close(inputStream);
  444. // 这个删除文件留给具体的上传处理
  445. FileUtils.deleteQuietly(new File(sourceFilePath));
  446. return pdfPath;
  447. } catch (Exception e) {
  448. log.error("转换pdf失败:" + e.getLocalizedMessage());
  449. return null;
  450. }
  451. }
  452. /**
  453. * 产生图片预览
  454. *
  455. * @param fileKey 文件的
  456. * @return
  457. */
  458. public static String getFileUrl(String fileKey) {
  459. try {
  460. return fileHandle.getPreviewUrl(fileKey);
  461. } catch (Exception e) {
  462. log.info("图片预览失败:" + e.getLocalizedMessage());
  463. return null;
  464. }
  465. }
  466. /**
  467. * 产生图片预览
  468. *
  469. * @param fileKey 文件的
  470. * @return
  471. */
  472. public static String getPreviewUrl(String fileKey) {
  473. try {
  474. return fileHandle.getPreviewUrl(fileKey);
  475. } catch (Exception e) {
  476. log.error("图片预览失败:" + e.getLocalizedMessage());
  477. return null;
  478. }
  479. }
  480. /**
  481. * 通过文件id得到文件流
  482. * @param fileId
  483. * @return
  484. * @throws Exception
  485. */
  486. public static byte[] getByte(String fileId) throws Exception{
  487. try {
  488. return fileHandle.getByte(fileId);
  489. } catch (Exception e) {
  490. log.error("得到文件流失败:" + e.getLocalizedMessage());
  491. return null;
  492. }
  493. }
  494. /**
  495. * 得到文件名称
  496. *
  497. * @param fileKey 文件的
  498. * @return
  499. */
  500. public static String getFileName(String fileKey) {
  501. if (StringUtils.isEmpty(fileKey)) {
  502. return "";
  503. }
  504. int index = fileKey.lastIndexOf("/");
  505. if (index != -1) {
  506. String fileName = fileKey.substring(index + 1);
  507. return fileName;
  508. }
  509. return fileKey;
  510. }
  511. }