package com.dy.pipIrrWebFile.files;
|
|
import com.dy.common.util.NumUtil;
|
import com.dy.pipIrrWebFile.util.*;
|
import lombok.extern.slf4j.Slf4j;
|
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) ;
|
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 = 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) ;
|
}
|
}
|
|
}
|