|
|
|
|
package com.api.sfj.DA.util;
|
|
|
|
|
|
|
|
|
|
import weaver.conn.RecordSet;
|
|
|
|
|
import weaver.general.BaseBean;
|
|
|
|
|
|
|
|
|
|
import java.io.*;
|
|
|
|
|
import java.nio.channels.FileChannel;
|
|
|
|
|
import java.util.UUID;
|
|
|
|
|
import java.util.zip.ZipEntry;
|
|
|
|
|
import java.util.zip.ZipInputStream;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* ClassName: JY_action
|
|
|
|
|
* date: 2020/8/10 17:23
|
|
|
|
|
* author LiLei
|
|
|
|
|
* remake 文件处理类,获取ecology存储的附件转换为原文件类型,要注意的是,一般附件都会被重命名为UUID形式并被压缩为zip形式。
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
public class JY_action {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* zip文件解压
|
|
|
|
|
*
|
|
|
|
|
* @param inputFile 待解压文件夹/文件
|
|
|
|
|
* @param destDirPath 解压路径
|
|
|
|
|
*/
|
|
|
|
|
public static void zipUncompress(String inputFile, String destDirPath) throws Exception {
|
|
|
|
|
File srcFile = new File(inputFile);//获取当前压缩文件
|
|
|
|
|
// 判断源文件是否存在
|
|
|
|
|
if (!srcFile.exists()) {
|
|
|
|
|
throw new Exception(srcFile.getPath() + "所指文件不存在");
|
|
|
|
|
}
|
|
|
|
|
//开始解压
|
|
|
|
|
//构建解压输入流
|
|
|
|
|
ZipInputStream zIn = new ZipInputStream(new FileInputStream(srcFile));
|
|
|
|
|
ZipEntry entry = null;
|
|
|
|
|
File file = null;
|
|
|
|
|
while ((entry = zIn.getNextEntry()) != null) {
|
|
|
|
|
if (!entry.isDirectory()) {
|
|
|
|
|
file = new File(destDirPath, entry.getName());
|
|
|
|
|
if (!file.exists()) {
|
|
|
|
|
new File(file.getParent()).mkdirs();//创建此文件的上级目录
|
|
|
|
|
}
|
|
|
|
|
OutputStream out = new FileOutputStream(file);
|
|
|
|
|
BufferedOutputStream bos = new BufferedOutputStream(out);
|
|
|
|
|
int len = -1;
|
|
|
|
|
byte[] buf = new byte[1024];
|
|
|
|
|
while ((len = zIn.read(buf)) != -1) {
|
|
|
|
|
bos.write(buf, 0, len);
|
|
|
|
|
}
|
|
|
|
|
// 关流顺序,先打开的后关闭
|
|
|
|
|
bos.close();
|
|
|
|
|
out.close();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 兼容linux的解压
|
|
|
|
|
*
|
|
|
|
|
* @param zipFilePath
|
|
|
|
|
* @param destDir
|
|
|
|
|
*/
|
|
|
|
|
public static void unzip(String zipFilePath, String destDir) {
|
|
|
|
|
System.setProperty("sun.zip.encoding", System.getProperty("sun.jnu.encoding")); //防止文件名中有中文时出错
|
|
|
|
|
//System.out.println(System.getProperty("sun.zip.encoding")); //ZIP编码方式
|
|
|
|
|
//System.out.println(System.getProperty("sun.jnu.encoding")); //当前文件编码方式
|
|
|
|
|
//System.out.println(System.getProperty("file.encoding")); //这个是当前文件内容编码方式
|
|
|
|
|
|
|
|
|
|
File dir = new File(destDir);
|
|
|
|
|
// create output directory if it doesn't exist
|
|
|
|
|
if (!dir.exists()) dir.mkdirs();
|
|
|
|
|
FileInputStream fis;
|
|
|
|
|
// buffer for read and write data to file
|
|
|
|
|
byte[] buffer = new byte[1024];
|
|
|
|
|
try {
|
|
|
|
|
fis = new FileInputStream(zipFilePath);
|
|
|
|
|
ZipInputStream zis = new ZipInputStream(fis);
|
|
|
|
|
ZipEntry ze = zis.getNextEntry();
|
|
|
|
|
while (ze != null) {
|
|
|
|
|
String fileName = ze.getName();
|
|
|
|
|
File newFile = new File(destDir + File.separator + fileName);
|
|
|
|
|
//System.out.println("Unzipping to " + newFile.getAbsolutePath());
|
|
|
|
|
// create directories for sub directories in zip
|
|
|
|
|
new File(newFile.getParent()).mkdirs();
|
|
|
|
|
FileOutputStream fos = new FileOutputStream(newFile);
|
|
|
|
|
int len;
|
|
|
|
|
while ((len = zis.read(buffer)) > 0) {
|
|
|
|
|
fos.write(buffer, 0, len);
|
|
|
|
|
}
|
|
|
|
|
fos.close();
|
|
|
|
|
// close this ZipEntry
|
|
|
|
|
zis.closeEntry();
|
|
|
|
|
ze = zis.getNextEntry();
|
|
|
|
|
}
|
|
|
|
|
// close last ZipEntry
|
|
|
|
|
zis.closeEntry();
|
|
|
|
|
zis.close();
|
|
|
|
|
fis.close();
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 删除文件
|
|
|
|
|
*/
|
|
|
|
|
public static boolean deleteFile(String path) {
|
|
|
|
|
BaseBean bs = new BaseBean();
|
|
|
|
|
boolean flag = true;
|
|
|
|
|
File file = new File(path);
|
|
|
|
|
|
|
|
|
|
if (file.isFile() && file.exists()) {
|
|
|
|
|
file.delete();
|
|
|
|
|
flag = true;
|
|
|
|
|
bs.writeLog("删除成功");
|
|
|
|
|
}
|
|
|
|
|
return flag;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 重命名文件
|
|
|
|
|
*/
|
|
|
|
|
public static void singleChange(String path, String oldName, String newName) {
|
|
|
|
|
|
|
|
|
|
File file = new File(path + oldName); //指定文件名及路径
|
|
|
|
|
BaseBean bs = new BaseBean();
|
|
|
|
|
if (file.renameTo(new File(path + newName))) {
|
|
|
|
|
bs.writeLog("修改成功!");
|
|
|
|
|
} else {
|
|
|
|
|
bs.writeLog("修改失败");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static String getFileNameNoEx(String filename) {
|
|
|
|
|
|
|
|
|
|
if ((filename != null) && (filename.length() > 0)) {
|
|
|
|
|
|
|
|
|
|
int dot = filename.lastIndexOf('.');
|
|
|
|
|
|
|
|
|
|
if ((dot >-1) && (dot < (filename.length()))) {
|
|
|
|
|
|
|
|
|
|
return filename.substring(0, dot);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return filename;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 用缓冲区读写,来提升读写效率。
|
|
|
|
|
*/
|
|
|
|
|
private static void fileCopyRightWay(String oldPath,String newPath) {
|
|
|
|
|
BaseBean bs = new BaseBean();
|
|
|
|
|
bs.writeLog("oldPath-->"+oldPath);
|
|
|
|
|
bs.writeLog("newPath-->"+newPath);
|
|
|
|
|
|
|
|
|
|
FileWriter fw = null;
|
|
|
|
|
FileReader fr = null;
|
|
|
|
|
try {
|
|
|
|
|
fr = new FileReader(oldPath);//读
|
|
|
|
|
fw = new FileWriter(newPath);//写
|
|
|
|
|
char[] buf = new char[1024];//缓冲区
|
|
|
|
|
int len;
|
|
|
|
|
while ((len = fr.read(buf)) != -1) {
|
|
|
|
|
fw.write(buf, 0, len);//读几个写几个
|
|
|
|
|
}
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
bs.writeLog(e.getMessage());
|
|
|
|
|
} finally {
|
|
|
|
|
if (fr != null) {
|
|
|
|
|
try {
|
|
|
|
|
fr.close();
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
bs.writeLog(e.getMessage());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (fw != null) {
|
|
|
|
|
try {
|
|
|
|
|
fw.flush();
|
|
|
|
|
fw.close();
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
bs.writeLog(e.getMessage());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void copyFileUsingFileChannels(File source, File dest) throws IOException {
|
|
|
|
|
FileChannel inputChannel = null;
|
|
|
|
|
FileChannel outputChannel = null;
|
|
|
|
|
try {
|
|
|
|
|
inputChannel = new FileInputStream(source).getChannel();
|
|
|
|
|
outputChannel = new FileOutputStream(dest).getChannel();
|
|
|
|
|
outputChannel.transferFrom(inputChannel, 0, inputChannel.size());
|
|
|
|
|
} finally {
|
|
|
|
|
inputChannel.close();
|
|
|
|
|
outputChannel.close();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static void fjFilename(String fj, String GDnewPath) {
|
|
|
|
|
|
|
|
|
|
String[] arr = fj.split(",");
|
|
|
|
|
BaseBean bs = new BaseBean();
|
|
|
|
|
bs.writeLog("进入附件方法---111"+GDnewPath);
|
|
|
|
|
for (int i = 0; i < arr.length; i++) {
|
|
|
|
|
RecordSet rs33 = new RecordSet();
|
|
|
|
|
String docdetail = "select top(1) im.filerealpath,do.imagefilename,im.iszip from imagefile im left join docimagefile do on im.imagefileid = do.imagefileid where docid=" + arr[i] + " order by versionid desc";
|
|
|
|
|
boolean su = rs33.execute(docdetail);
|
|
|
|
|
|
|
|
|
|
bs.writeLog("语句执行" + su);
|
|
|
|
|
bs.writeLog("===" + docdetail);
|
|
|
|
|
if (rs33.next()) {
|
|
|
|
|
String filerealpath = rs33.getString("filerealpath");
|
|
|
|
|
String imagefilename = rs33.getString("imagefilename");
|
|
|
|
|
int zip = rs33.getInt("iszip");
|
|
|
|
|
|
|
|
|
|
bs.writeLog("获取数据--11--44--" + filerealpath);
|
|
|
|
|
bs.writeLog("获取数据--11--44--" + imagefilename);
|
|
|
|
|
bs.writeLog("进入正文方法---111====判断是否压缩" + zip);
|
|
|
|
|
|
|
|
|
|
if (zip == 1) {
|
|
|
|
|
try {
|
|
|
|
|
bs.writeLog("进入正文方法--22====是压缩" + zip);
|
|
|
|
|
int index = filerealpath.lastIndexOf("/");
|
|
|
|
|
int index2 = imagefilename.lastIndexOf(".");
|
|
|
|
|
String zipPath = filerealpath.substring(index + 1); //压缩文件名
|
|
|
|
|
int index3 = zipPath.lastIndexOf(".");
|
|
|
|
|
String zipPath1 = zipPath.substring(0,index3);
|
|
|
|
|
String newname = imagefilename.substring(index2);
|
|
|
|
|
unzip(filerealpath, GDnewPath);
|
|
|
|
|
bs.writeLog(GDnewPath);
|
|
|
|
|
singleChange(GDnewPath+"/", zipPath1, zipPath1 + newname);
|
|
|
|
|
bs.writeLog("重命名"+zipPath1 + newname);
|
|
|
|
|
// bs.writeLog("重命名"+zipPath+ newname);
|
|
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
bs.writeLog("进入正文方法---33==OFD==否压缩" + zip);
|
|
|
|
|
int index = filerealpath.lastIndexOf("/");
|
|
|
|
|
int index2 = imagefilename.lastIndexOf(".");
|
|
|
|
|
String zipPath = filerealpath.substring(index + 1); //未压缩文件名
|
|
|
|
|
String newname = imagefilename.substring(index2);
|
|
|
|
|
|
|
|
|
|
bs.writeLog("进入正文方法---344==="+zipPath+"===="+newname);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
File f = new File(GDnewPath+"/"+zipPath+newname);
|
|
|
|
|
|
|
|
|
|
//复制文件到新文件夹下
|
|
|
|
|
if(! f.exists()) {
|
|
|
|
|
bs.writeLog("进入正文方法--55==OFD==否压缩" + zip);
|
|
|
|
|
InputStream instream = null;
|
|
|
|
|
try {
|
|
|
|
|
instream = new FileInputStream(new File(filerealpath));
|
|
|
|
|
} catch (FileNotFoundException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
OutputStream out1 = null;
|
|
|
|
|
try {
|
|
|
|
|
out1 = new FileOutputStream(new File(GDnewPath+"/"+zipPath+newname));
|
|
|
|
|
bs.writeLog("进入正文方法--66==OFD==否压缩" );
|
|
|
|
|
int read = 0;
|
|
|
|
|
byte[] bytes = new byte[2048];
|
|
|
|
|
while((read = instream.read(bytes)) != -1) {
|
|
|
|
|
out1.write(bytes, 0, read);
|
|
|
|
|
}
|
|
|
|
|
out1.flush();
|
|
|
|
|
instream.close();
|
|
|
|
|
out1.close();
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static String filename(String fj, String GDnewPath) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String[] arr = fj.split(",");
|
|
|
|
|
BaseBean bs = new BaseBean();
|
|
|
|
|
bs.writeLog("进入附件方法---111"+GDnewPath);
|
|
|
|
|
UUID uuid = UUID.randomUUID();
|
|
|
|
|
for (int i = 0; i < arr.length; i++) {
|
|
|
|
|
RecordSet rs33 = new RecordSet();
|
|
|
|
|
String docdetail = "select top(1) im.filerealpath,do.imagefilename,im.iszip from imagefile im left join docimagefile do on im.imagefileid = do.imagefileid where docid=" + arr[i] + " order by versionid desc";
|
|
|
|
|
boolean su = rs33.execute(docdetail);
|
|
|
|
|
|
|
|
|
|
bs.writeLog("语句执行" + su);
|
|
|
|
|
bs.writeLog("===" + docdetail);
|
|
|
|
|
if (rs33.next()) {
|
|
|
|
|
String filerealpath = rs33.getString("filerealpath");
|
|
|
|
|
String imagefilename = rs33.getString("imagefilename");
|
|
|
|
|
int zip = rs33.getInt("iszip");
|
|
|
|
|
|
|
|
|
|
bs.writeLog("获取数据--11--44--" + filerealpath);
|
|
|
|
|
bs.writeLog("获取数据--11--44--" + imagefilename);
|
|
|
|
|
bs.writeLog("进入正文方法---111====判断是否压缩" + zip);
|
|
|
|
|
|
|
|
|
|
if (zip == 1) {
|
|
|
|
|
try {
|
|
|
|
|
bs.writeLog("进入正文方法--22====是压缩" + zip);
|
|
|
|
|
|
|
|
|
|
int index = filerealpath.lastIndexOf("/");
|
|
|
|
|
int index2 = imagefilename.lastIndexOf(".");
|
|
|
|
|
String zipPath = filerealpath.substring(index + 1); //压缩文件名
|
|
|
|
|
int index3 = zipPath.lastIndexOf(".");
|
|
|
|
|
|
|
|
|
|
String zipPath1 = zipPath.substring(0,index3);
|
|
|
|
|
String newname = imagefilename.substring(index2);
|
|
|
|
|
unzip(filerealpath, GDnewPath);
|
|
|
|
|
|
|
|
|
|
bs.writeLog(GDnewPath);
|
|
|
|
|
singleChange(GDnewPath+"/", zipPath1, zipPath1 + newname);
|
|
|
|
|
bs.writeLog("重命名"+zipPath1 + newname);
|
|
|
|
|
bs.writeLog("重命名"+zipPath+ newname);
|
|
|
|
|
String oldPath=GDnewPath+"/"+zipPath1+newname;
|
|
|
|
|
bs.writeLog("oldPath-->"+oldPath);
|
|
|
|
|
String newPath=GDnewPath+"/"+uuid.toString()+newname;
|
|
|
|
|
bs.writeLog("newPath-->"+newPath);
|
|
|
|
|
// fileCopyRightWay(oldPath,newPath);
|
|
|
|
|
try {
|
|
|
|
|
copyFileUsingFileChannels(new File(oldPath), new File(newPath));
|
|
|
|
|
}catch (Exception e){
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
bs.writeLog("执行完重命名-->");
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
bs.writeLog("进入正文方法---33==OFD==否压缩" + zip);
|
|
|
|
|
int index = filerealpath.lastIndexOf("/");
|
|
|
|
|
int index2 = imagefilename.lastIndexOf(".");
|
|
|
|
|
String zipPath = filerealpath.substring(index + 1); //未压缩文件名
|
|
|
|
|
String newname = imagefilename.substring(index2);
|
|
|
|
|
|
|
|
|
|
bs.writeLog("进入正文方法---344==="+zipPath+"===="+newname);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
File f = new File(GDnewPath+"/"+zipPath+newname);
|
|
|
|
|
|
|
|
|
|
//复制文件到新文件夹下
|
|
|
|
|
if(! f.exists()) {
|
|
|
|
|
bs.writeLog("进入正文方法--55==OFD==否压缩" + zip);
|
|
|
|
|
InputStream instream = null;
|
|
|
|
|
try {
|
|
|
|
|
instream = new FileInputStream(new File(filerealpath));
|
|
|
|
|
} catch (FileNotFoundException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
OutputStream out1 = null;
|
|
|
|
|
try {
|
|
|
|
|
out1 = new FileOutputStream(new File(GDnewPath+"/"+zipPath+newname));
|
|
|
|
|
bs.writeLog("进入正文方法--66==OFD==否压缩" );
|
|
|
|
|
int read = 0;
|
|
|
|
|
byte[] bytes = new byte[2048];
|
|
|
|
|
while((read = instream.read(bytes)) != -1) {
|
|
|
|
|
out1.write(bytes, 0, read);
|
|
|
|
|
}
|
|
|
|
|
out1.flush();
|
|
|
|
|
instream.close();
|
|
|
|
|
out1.close();
|
|
|
|
|
bs.writeLog("uuid.toString2()-->"+uuid.toString());
|
|
|
|
|
String oldPath=GDnewPath+"/"+zipPath+newname;
|
|
|
|
|
bs.writeLog("oldPath2-->"+oldPath);
|
|
|
|
|
String newPath=GDnewPath+"/"+uuid.toString()+newname;
|
|
|
|
|
bs.writeLog("newPath2-->"+newPath);
|
|
|
|
|
// fileCopyRightWay(oldPath,newPath);
|
|
|
|
|
try {
|
|
|
|
|
copyFileUsingFileChannels(new File(oldPath), new File(newPath));
|
|
|
|
|
}catch (Exception e){
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
bs.writeLog("执行完重命名2-->");
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
return uuid.toString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|