Commit 85739edf authored by yanzg's avatar yanzg

参数处理

parent 34f714fc
package com.yanzuoguang.cloud.file;
import com.yanzuoguang.cloud.file.vo.YzgFileVideoImageItemReqVo;
import java.io.IOException;
/**
* 转换文件接口
*
* @author 颜佐光
*/
public interface YzgConvert {
/**
* 转换执行函数
*
* @param item 转换属性
* @param from 来源文件
* @param toFileTemp 目标文件
*/
void run(YzgFileVideoImageItemReqVo item, String from, String toFileTemp) throws IOException;
}
......@@ -129,53 +129,61 @@ public class YzgFileServiceImpl implements YzgFileService {
// 先检查一遍参数
for (YzgFileMoveItemReqVo item : req.getList()) {
if (StringHelper.isEmpty(item.getFrom())) {
throw new CodeException("移动来源路径不能为空");
}
if (StringHelper.isEmpty(item.getTo())) {
throw new CodeException("移动目标路径不能为空");
}
checkMove(item);
}
checkFolder(item.getFrom());
checkFolder(item.getTo());
// 然后再移动
for (YzgFileMoveItemReqVo item : req.getList()) {
move(item);
}
}
String fullFrom = fileConfig.getServerFullPath(item.getFrom());
String fullTo = fileConfig.getServerFullPath(item.getTo());
File fileFrom = new File(fullFrom);
File fileTo = new File(fullTo);
private void checkMove(YzgFileMoveItemReqVo item) {
if (StringHelper.isEmpty(item.getFrom())) {
throw new CodeException("移动来源路径不能为空");
}
if (StringHelper.isEmpty(item.getTo())) {
throw new CodeException("移动目标路径不能为空");
}
if (fileFrom.exists() && fileTo.exists()) {
if (fileFrom.isFile() && fileTo.isDirectory()) {
throw new CodeException(String.format("不能用文件 %s 覆盖文件夹 %s", item.getFrom(), item.getTo()));
}
checkFolder(item.getFrom());
checkFolder(item.getTo());
String fullFrom = fileConfig.getServerFullPath(item.getFrom());
String fullTo = fileConfig.getServerFullPath(item.getTo());
File fileFrom = new File(fullFrom);
File fileTo = new File(fullTo);
if (fileFrom.exists() && fileTo.exists()) {
if (fileFrom.isFile() && fileTo.isDirectory()) {
throw new CodeException(String.format("不能用文件 %s 覆盖文件夹 %s", item.getFrom(), item.getTo()));
}
}
}
// 然后再移动
for (YzgFileMoveItemReqVo item : req.getList()) {
String fullFrom = fileConfig.getServerFullPath(item.getFrom());
String fullTo = fileConfig.getServerFullPath(item.getTo());
File fileFrom = new File(fullFrom);
File fileTo = new File(fullTo);
// 防止另外一个线程移动中
if (fileFrom.exists() && fileTo.exists()) {
if (fileFrom.isFile() && fileTo.isDirectory()) {
throw new CodeException(String.format("不能用文件 %s 覆盖文件夹 %s", item.getFrom(), item.getTo()));
}
} else if (!fileFrom.exists()) {
continue;
private void move(YzgFileMoveItemReqVo item) {
String fullFrom = fileConfig.getServerFullPath(item.getFrom());
String fullTo = fileConfig.getServerFullPath(item.getTo());
File fileFrom = new File(fullFrom);
File fileTo = new File(fullTo);
// 防止另外一个线程移动中
if (fileFrom.exists() && fileTo.exists()) {
if (fileFrom.isFile() && fileTo.isDirectory()) {
throw new CodeException(String.format("不能用文件 %s 覆盖文件夹 %s", item.getFrom(), item.getTo()));
}
} else if (!fileFrom.exists()) {
return;
}
// 创建父文件夹
File parentFile = fileTo.getParentFile();
FileHelper.createDirectory(parentFile);
// 创建父文件夹
File parentFile = fileTo.getParentFile();
FileHelper.createDirectory(parentFile);
try {
Files.move(Paths.get(fullFrom), Paths.get(fullTo), StandardCopyOption.REPLACE_EXISTING);
} catch (Exception ex) {
throw new CodeException(String.format("移动文件 %s 到 %s 失败,原因:%s", item.getFrom(), item.getTo(), ex.getMessage()));
}
try {
Files.move(Paths.get(fullFrom), Paths.get(fullTo), StandardCopyOption.REPLACE_EXISTING);
} catch (Exception ex) {
throw new CodeException(String.format("移动文件 %s 到 %s 失败,原因:%s", item.getFrom(), item.getTo(), ex.getMessage()));
}
}
......@@ -229,7 +237,13 @@ public class YzgFileServiceImpl implements YzgFileService {
*/
@Override
public void convertImage(YzgFileVideoImageReqVo req) {
this.convert(req, FileHelper.FILE_TYPE_IMAGE, "图片", new YzgConvert() {
@Override
public void run(YzgFileVideoImageItemReqVo item, String from, String toFileTemp) throws IOException {
// 压缩视频到临时文件
MediaHelper.compressPic(from, toFileTemp, item.getQuote(), item.getSize());
}
});
}
/**
......@@ -239,7 +253,7 @@ public class YzgFileServiceImpl implements YzgFileService {
*/
@Override
public void convertVideoFirst(YzgFileConvertVideoFirstReqVo req) {
}
/**
......@@ -249,22 +263,47 @@ public class YzgFileServiceImpl implements YzgFileService {
*/
@Override
public void convertVideo(YzgFileVideoImageReqVo req) {
this.convert(req, FileHelper.FILE_TYPE_VIDEO, "视频", new YzgConvert() {
@Override
public void run(YzgFileVideoImageItemReqVo item, String from, String toFileTemp) throws IOException {
// 压缩视频的参数
MediaParameter parameter = new MediaParameter(item.getSize(), item.getQuote());
// 设置最小宽度,指的是宽度和高度中的大值,宽度>高度
parameter.setMinVideoWidth(StringHelper.getFirst(item.getWidth(), parameter.getMinVideoWidth()));
// 设置最小高度,指的是宽度和高度中的小值,宽度>高度
parameter.setMinVideoHeight(StringHelper.getFirst(item.getHeight(), parameter.getMinVideoHeight()));
// 设置视频最小比特率
parameter.setMinVideoBitRate(StringHelper.getFirst(item.getBitrate(), parameter.getMinVideoBitRate()));
// 压缩视频到临时文件
MediaHelper.zipVideoMp4(from, toFileTemp, parameter);
}
});
}
/**
* 转换文件函数
*
* @param req
* @param type
* @param tag
* @param run
*/
private void convert(YzgFileVideoImageReqVo req, int type, String tag, YzgConvert run) {
List<YzgFileVideoImageItemReqVo> toFiles = req.getList();
if (toFiles == null || toFiles.isEmpty()) {
return;
}
// 先循环检测参数
checkFolder(req.getFrom());
for (YzgFileVideoImageItemReqVo item : req.getList()) {
checkFolder(item.getTo());
}
// 转换文件基础处理
convertBase(req);
// 来源文件路径
String from = fileConfig.getServerFullPath(req.getFrom());
YzgFileBaseVo fromInfo = new YzgFileBaseVo();
fileConfig.init(fromInfo, from);
if (fromInfo.getType() != FileHelper.FILE_TYPE_VIDEO) {
throw new CodeException("请传入视频文件");
if (fromInfo.getType() != type) {
throw new CodeException("请传入" + tag + "文件");
}
// 循环转换所有文件
......@@ -272,14 +311,6 @@ public class YzgFileServiceImpl implements YzgFileService {
String to = fileConfig.getServerFullPath(item.getTo());
// 先压缩到临时文件
String toFileTemp = to + StringHelper.getNewID() + ".tmp";
MediaParameter parameter = new MediaParameter(item.getSize(), item.getQuote());
// 设置最小宽度,指的是宽度和高度中的大值,宽度>高度
parameter.setMinVideoWidth(StringHelper.getFirst(item.getWidth(), parameter.getMinVideoWidth()));
// 设置最小高度,指的是宽度和高度中的小值,宽度>高度
parameter.setMinVideoHeight(StringHelper.getFirst(item.getHeight(), parameter.getMinVideoHeight()));
// 设置视频最小比特率
parameter.setMinVideoBitRate(StringHelper.getFirst(item.getBitrate(), parameter.getMinVideoBitRate()));
// 将临时文件改成具体的文件
File fileTemp = new File(toFileTemp);
File file = new File(to);
......@@ -287,8 +318,8 @@ public class YzgFileServiceImpl implements YzgFileService {
if (fileTemp.exists()) {
fileTemp.delete();
}
// 压缩视频到临时文件
MediaHelper.zipVideoMp4(from, toFileTemp, parameter);
// 转换文件
run.run(item, from, toFileTemp);
// 判断文件是否存在,不存在则更改临时文件名
if (file.exists()) {
file.delete();
......@@ -306,6 +337,22 @@ public class YzgFileServiceImpl implements YzgFileService {
}
}
private void convertBase(YzgFileVideoImageReqVo req) {
// 先循环检测参数
checkFolder(req.getFrom());
for (YzgFileVideoImageItemReqVo item : req.getList()) {
checkFolder(item.getTo());
}
// 移动文件,并且确定只移动一次
if (!StringHelper.isEmpty(req.getTo())) {
checkMove(req);
move(req);
req.setFrom(req.getTo());
req.setTo(StringHelper.EMPTY);
}
}
/**
* 获取行记的显示的图片
*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment