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