zhubaomin
2025-04-07 e67870fff62635cd14beb0d5988f08aeef4b22fa
pipIrr-platform/pipIrr-web/pipIrr-web-file/src/main/java/com/dy/pipIrrWebFile/files/FileCtrl.java
New file
@@ -0,0 +1,254 @@
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) ;
        }
    }
}