| New file | 
|  |  |  | 
|---|
|  |  |  | 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) ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|