| package com.dy.pipIrrWebFile.files; | 
|   | 
| import com.dy.common.util.NumUtil; | 
| import com.dy.pipIrrWebFile.util.*; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.jcodec.scale.AWTUtil; | 
| import org.springframework.beans.factory.annotation.Value; | 
| import org.springframework.web.bind.annotation.PostMapping; | 
| import org.springframework.web.bind.annotation.RequestMapping; | 
| import org.springframework.web.bind.annotation.RestController; | 
| import org.springframework.web.multipart.MultipartFile; | 
|   | 
| import javax.imageio.ImageIO; | 
| import java.awt.image.BufferedImage; | 
| import java.io.*; | 
|   | 
| /** | 
|  * web文件上传, 内部调用,即由其他子模块调用, | 
|  * 一般不由前端系统调用 | 
|  */ | 
| @Slf4j | 
| @RestController | 
| @RequestMapping(path="file") | 
| @SuppressWarnings("unchecked")//java版本越高,对泛型约束越严,所以配置SuppressWarnings("unchecked") | 
| public class FileCtrl { | 
|   | 
|     @Value("${dy.photoZipWidth}") | 
|     private String photoZipWidthStr ; | 
|   | 
|     private static final String VideoZipPicFileType = "jpg"; | 
|     private static final Integer VideoZipPicFromFrame = 5 ; | 
|   | 
|     /** | 
|      * web分布式文件系统保存照片文件 | 
|      * @param file | 
|      * @param regionNum | 
|      * @param json 水印信息 | 
|      * @param absolutePath | 
|      * @param relativePath | 
|      * @param fileName | 
|      * @return | 
|      */ | 
|     @PostMapping("/savePhoto") | 
|     public String savePhoto(MultipartFile file, | 
|                           String regionNum, | 
|                           String json, | 
|                           String absolutePath, | 
|                           String relativePath, | 
|                           String fileName) { | 
|         Integer photoZipWidth = 400 ; | 
|         if(photoZipWidthStr != null && NumUtil.isPlusIntNumber(photoZipWidthStr)){ | 
|             photoZipWidth = Integer.parseInt(photoZipWidthStr) ; | 
|         } | 
|         String fileRelativePath = null ; | 
|         try { | 
|             if (file != null) { | 
|                 if(absolutePath != null && relativePath != null && fileName != null){ | 
|                     InputStream input = file.getInputStream() ; | 
|                     //生成新文件相对路径 | 
|                     FilePhotoUtil fUtil = new FilePhotoUtil() ; | 
|                     fileRelativePath = fUtil.newFileRelativityPath(absolutePath, relativePath, regionNum) + fileName ; | 
|                     String filePath = absolutePath + fileRelativePath ; | 
|                     if(!fUtil.saveFile(filePath, input)){ | 
|                         fileRelativePath = null ; | 
|                     }else { | 
|                         //存储成功 | 
|                         File fPic = new File(filePath) ; | 
|                         //生成缩略图 | 
|                         int index = filePath.lastIndexOf(".") ; | 
|                         String zipFilePath1 = filePath.substring(0, index) ; | 
|                         String zipFilePath2 = filePath.substring(index) ; | 
|                         String zipFilePath = zipFilePath1 + "_" + zipFilePath2 ; | 
|                         InputStream zipFileInput ; | 
|                         if(zipFilePath2.equalsIgnoreCase(".png")){ | 
|                             zipFileInput = ZipImg.zipToPng(fPic, photoZipWidth, photoZipWidth) ; | 
|                         }else{ | 
|                             zipFileInput = ZipImg.zipToJpg(fPic, photoZipWidth, photoZipWidth) ; | 
|                         } | 
|                         if(zipFileInput.available() > 0){ | 
|                             new FileUtil().saveFile(zipFilePath, zipFileInput) ; | 
|                         }else{ | 
|                             //如果压缩文件不存在或生成失败,则复制源文件 | 
|                             new FileUtil().saveFile(zipFilePath, file.getInputStream()) ; | 
|                         } | 
|                     } | 
|                 } | 
|             } | 
|         } catch (Exception e) { | 
|             log.error("保存照片文件异常", e); | 
|         } | 
|         return fileRelativePath ; | 
|     } | 
|   | 
|     /** | 
|      * web分布式文件系统保存录音音频文件 | 
|      * @param file | 
|      * @param regionNum | 
|      * @param json 水印信息 | 
|      * @param absolutePath | 
|      * @param relativePath | 
|      * @param fileName | 
|      * @return | 
|      */ | 
|     @PostMapping("/savePhone") | 
|     public String savePhone(MultipartFile file, | 
|                             String regionNum, | 
|                             String json, | 
|                             String absolutePath, | 
|                             String relativePath, | 
|                             String fileName) { | 
|         String fileRelativePath = null ; | 
|         try { | 
|             if (file != null) { | 
|                 if(absolutePath != null && relativePath != null && fileName != null){ | 
|                     InputStream input = file.getInputStream() ; | 
|                     //生成新文件相对路径 | 
|                     FilePhoneUtil fUtil = new FilePhoneUtil() ; | 
|                     fileRelativePath = fUtil.newFileRelativityPath(absolutePath, relativePath, regionNum) + fileName ; | 
|                     String filePath = absolutePath + fileRelativePath ; | 
|                     if(!fUtil.saveFile(filePath, input)){ | 
|                         fileRelativePath = null ; | 
|                     } | 
|                 } | 
|             } | 
|         } catch (Exception e) { | 
|             log.error("保存录音音频文件异常", e); | 
|         } | 
|         return fileRelativePath ; | 
|     } | 
|   | 
|   | 
|     /** | 
|      * web分布式文件系统保存录像视频文件 | 
|      * @param file | 
|      * @param regionNum | 
|      * @param json 水印信息 | 
|      * @param absolutePath | 
|      * @param relativePath | 
|      * @param fileName | 
|      * @return | 
|      */ | 
|     @PostMapping("/saveVideo") | 
|     public String saveVideo(MultipartFile file, | 
|                             String regionNum, | 
|                             String json, | 
|                             String absolutePath, | 
|                             String relativePath, | 
|                             String fileName) { | 
|         String fileRelativePath = null ; | 
|         try { | 
|             if (file != null) { | 
|                 if(absolutePath != null && relativePath != null && fileName != null){ | 
|                     InputStream input = file.getInputStream() ; | 
|                     //生成新文件相对路径 | 
|                     FileVideoUtil fUtil = new FileVideoUtil() ; | 
|                     fileRelativePath = fUtil.newFileRelativityPath(absolutePath, relativePath, regionNum) + fileName ; | 
|                     String filePath = absolutePath + fileRelativePath ; | 
|                     if(!fUtil.saveFile(filePath, input)){ | 
|                         fileRelativePath = null ; | 
|                     }else { | 
|                         //存储成功, 生成缩略图 | 
|                         BufferedImage bufImg = new VideoUtils(VideoZipPicFileType, VideoZipPicFromFrame).fetchFrame(file) ; | 
|                         // 向右旋转90度 | 
|                         // bufImg = AWTUtil.rotate90ToRight(bufImg) ; | 
|                         String zipFilePath = filePath.substring(0, filePath.lastIndexOf(".")) + "_." + VideoZipPicFileType ; | 
|                         Integer photoZipWidth = 400 ; | 
|                         if(photoZipWidthStr != null && NumUtil.isPlusIntNumber(photoZipWidthStr)){ | 
|                             photoZipWidth = Integer.parseInt(photoZipWidthStr) ; | 
|                         } | 
|                         InputStream zipFileInput = ZipImg.zipToJpg(bufImg, photoZipWidth, photoZipWidth) ; | 
|                         if(zipFileInput.available() > 0){ | 
|                             new FileUtil().saveFile(zipFilePath, zipFileInput) ; | 
|                         }else{ | 
|                             //如果压缩文件不存在或生成失败,则复制源文件 | 
|                             ByteArrayOutputStream os = new ByteArrayOutputStream(); | 
|                             ImageIO.write(bufImg, VideoZipPicFileType, os); | 
|                             InputStream in = new ByteArrayInputStream(os.toByteArray()); | 
|                             new FileUtil().saveFile(zipFilePath, in) ; | 
|                         } | 
|                     } | 
|                 } | 
|             } | 
|         } catch (Exception e) { | 
|             log.error("保存录像视频文件异常", e); | 
|         } | 
|         return fileRelativePath ; | 
|     } | 
|   | 
|   | 
|     /** | 
|      * web分布式文件系统保存文档文件 | 
|      * @param file | 
|      * @param regionNum | 
|      * @param json 水印信息 | 
|      * @param absolutePath | 
|      * @param relativePath | 
|      * @param fileName | 
|      * @return | 
|      */ | 
|     @PostMapping("/saveDocument") | 
|     public String saveDocument(MultipartFile file, | 
|                             String regionNum, | 
|                             String json, | 
|                             String absolutePath, | 
|                             String relativePath, | 
|                             String fileName) { | 
|         String fileRelativePath = null ; | 
|         try { | 
|             if (file != null) { | 
|                 if(absolutePath != null && relativePath != null && fileName != null){ | 
|                     InputStream input = file.getInputStream() ; | 
|                     //生成新文件相对路径 | 
|                     FileDocumentUtil fUtil = new FileDocumentUtil() ; | 
|                     fileRelativePath = fUtil.newFileRelativityPath(absolutePath, relativePath, regionNum) + fileName ; | 
|                     String filePath = absolutePath + fileRelativePath ; | 
|                     if(!fUtil.saveFile(filePath, input)){ | 
|                         fileRelativePath = null ; | 
|                     } | 
|                 } | 
|             } | 
|         } catch (Exception e) { | 
|             log.error("保存文档文件异常", e); | 
|         } | 
|         return fileRelativePath ; | 
|     } | 
|   | 
|   | 
|     public static void main(String[] args) throws Exception{ | 
|         String photoZipWidthStr = "400" ; | 
|         String VideoZipPicFileType = "jpg"; | 
|         //存储成功, 生成缩略图 | 
|         String filePath = "D:\\mp4\\test.mp4" ; | 
|         BufferedImage bufImg = new VideoUtils("jpg", 0).fetchFrame(filePath) ; | 
|         int index = filePath.lastIndexOf(".") ; | 
|         String basePath = filePath.substring(0, index) ; | 
|         Integer photoZipWidth = 400 ; | 
|         if(photoZipWidthStr != null && NumUtil.isPlusIntNumber(photoZipWidthStr)){ | 
|             photoZipWidth = Integer.parseInt(photoZipWidthStr) ; | 
|         } | 
|         String zipFilePath = basePath + "_." + VideoZipPicFileType ; | 
|         InputStream zipFileInput = null ; | 
|         zipFileInput = ZipImg.zipToJpg(bufImg, photoZipWidth, photoZipWidth) ; | 
|         if(zipFileInput.available() > 0){ | 
|             new FileUtil().saveFile(zipFilePath, zipFileInput) ; | 
|         }else{ | 
|             //如果压缩文件不存在或生成失败,则复制源文件 | 
|             ByteArrayOutputStream os = new ByteArrayOutputStream(); | 
|             ImageIO.write(bufImg, VideoZipPicFileType, os); | 
|             InputStream in = new ByteArrayInputStream(os.toByteArray()); | 
|             new FileUtil().saveFile(zipFilePath, in) ; | 
|         } | 
|     } | 
|   | 
| } |