1.文件下载增加打包功能;
This commit is contained in:
parent
ef126175fb
commit
c215c4ace3
@ -1,5 +1,11 @@
|
||||
<%@page import="com.tenwa.reckon.copydata.FileCopyToOtherPath"%>
|
||||
<%@page import="com.tenwa.officetempalte.action.CreateOfficeAction"%>
|
||||
<%@page import="com.tenwa.officetempalte.exportcallback.impl.ZipUtils"%>
|
||||
<%@page import="java.text.SimpleDateFormat"%>
|
||||
<%@page import="java.io.FileOutputStream"%>
|
||||
<%@page import="java.io.File"%>
|
||||
<%@page import="java.util.Date"%>
|
||||
<%@page import="java.util.UUID"%>
|
||||
<%@page import="jbo.app.tenwa.doc.LC_COPYFILE_LOG"%>
|
||||
<%@page import="com.amarsoft.are.util.StringFunction"%>
|
||||
<%@page import="com.amarsoft.are.jbo.JBOFactory"%>
|
||||
@ -14,14 +20,19 @@
|
||||
String batchNos = CurPage.getParameter("batchNos");
|
||||
String userid = CurPage.getParameter("userid");
|
||||
String sParam = CurPage.getParameter("sParam");
|
||||
|
||||
String templateNo = "8c0b32eefcf349e5b5f76d898df0bbbb";
|
||||
|
||||
String fileSavePath = CurPage.getParameter("fileSavePath");
|
||||
//创建临时路径
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
|
||||
String time = sdf.format(new Date());
|
||||
String uuid=UUID.randomUUID().toString().replaceAll("-", "");
|
||||
String fileSavePath_temp = fileSavePath+"/"+time+uuid;
|
||||
|
||||
FileCopyToOtherPath cp = new FileCopyToOtherPath();
|
||||
cp.setContractNos(contractNos);
|
||||
cp.setBatchNos(batchNos);
|
||||
cp.setUserid(userid);
|
||||
cp.setFileSavePath_temp(fileSavePath_temp);
|
||||
|
||||
CreateOfficeAction coa = new CreateOfficeAction();
|
||||
JBOTransaction tx = JBOFactory.createJBOTransaction();
|
||||
@ -36,8 +47,8 @@
|
||||
String[] contractNoArray = contractNos.split("@");
|
||||
String[] batchNoArray = batchNos.split("@");
|
||||
for(int i=0;i<contractNoArray.length;i++){
|
||||
String fileSavePath = CurPage.getParameter("fileSavePath")+"/"+contractNoArray[i]+"/";
|
||||
String templateParam = "{\"OBJECTTYPE\":\"租金支付表导出\"@\"CurUserId\":\""+userid+"\"@\"fileSavePath\":\""+fileSavePath+"\"@\"CONTRACT_NO\":\""+contractNoArray[i]+"\"}";
|
||||
String fileSavePath_xml = fileSavePath_temp+"/"+contractNoArray[i]+"/";
|
||||
String templateParam = "{\"OBJECTTYPE\":\"租金支付表导出\"@\"CurUserId\":\""+userid+"\"@\"fileSavePath\":\""+fileSavePath_xml+"\"@\"CONTRACT_NO\":\""+contractNoArray[i]+"\"}";
|
||||
coa.setTemplateNo(templateNo);
|
||||
coa.setTemplateParam(templateParam);
|
||||
String result = coa.createOfficeByTemplate(tx);
|
||||
@ -53,6 +64,13 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
//压缩
|
||||
FileOutputStream fos1 = new FileOutputStream(new File(fileSavePath+"/"+time+".zip"));
|
||||
ZipUtils zdo = new ZipUtils();
|
||||
zdo.toZip(fileSavePath_temp, fos1, true);
|
||||
//删除原文件
|
||||
File f = new File(fileSavePath_temp);
|
||||
zdo.deleteFile(f);
|
||||
out.print("SUCCESS");
|
||||
%><%@ include file="/IncludeEndAJAX.jsp"%>
|
||||
|
||||
|
||||
@ -62,7 +62,11 @@
|
||||
var contractNos = contractNoArray.join("@");
|
||||
contractNos.replace(/\s+/g, "");
|
||||
var batchNos = batchNoArray.join("@");
|
||||
var fileSavePath = "<%=CurConfig.getConfigure("FileCopyPath")%>"
|
||||
var fileSavePath = "<%=CurConfig.getConfigure("FileCopyPath")%>";
|
||||
if(fileSavePath==""||fileSavePath==null){
|
||||
alert("文件保存路径未配置");
|
||||
return;
|
||||
}
|
||||
var sUrl = "/Tenwa/Core/FlowManager/CopyFileToOther.jsp";
|
||||
var param = "contractNos="+contractNos+"&batchNos="+batchNos+"&userid="+"<%=userid%>"+"&sParam="+sParam+"&fileSavePath="+fileSavePath;
|
||||
AsControl.RunJsp(sUrl,param,function(result){
|
||||
|
||||
Binary file not shown.
@ -6,22 +6,12 @@ import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
import jbo.app.tenwa.doc.LC_COPYFILE_LOG;
|
||||
|
||||
import org.apache.commons.io.FileUtils;
|
||||
|
||||
import com.amarsoft.are.jbo.BizObject;
|
||||
import com.amarsoft.are.jbo.BizObjectManager;
|
||||
import com.amarsoft.are.jbo.JBOFactory;
|
||||
import com.amarsoft.are.util.StringFunction;
|
||||
import com.amarsoft.awe.Configure;
|
||||
import com.amarsoft.awe.util.Transaction;
|
||||
import com.tenwa.comm.util.jboutil.DataOperatorUtil;
|
||||
public class FileCopyToOtherPath {
|
||||
@ -29,25 +19,8 @@ public class FileCopyToOtherPath {
|
||||
private String contractNos;
|
||||
private String batchNos;
|
||||
private String userid;
|
||||
private String fileSavePath_temp;
|
||||
|
||||
public String getUserid() {
|
||||
return userid;
|
||||
}
|
||||
public void setUserid(String userid) {
|
||||
this.userid = userid;
|
||||
}
|
||||
public String getContractNo() {
|
||||
return contractNos;
|
||||
}
|
||||
public void setContractNos(String contractNos) {
|
||||
this.contractNos = contractNos;
|
||||
}
|
||||
public String getBatchNos() {
|
||||
return batchNos;
|
||||
}
|
||||
public void setBatchNos(String batchNos) {
|
||||
this.batchNos = batchNos;
|
||||
}
|
||||
public String doCopy(String contractNo,String bacthNo,String type){
|
||||
Transaction Sqlca = Transaction.createTransaction("als");
|
||||
//原路径
|
||||
@ -57,8 +30,7 @@ public class FileCopyToOtherPath {
|
||||
//目标根目录
|
||||
String rootPath;
|
||||
try {
|
||||
Configure config = Configure.getInstance();
|
||||
rootPath = config.getConfigure("FileCopyPath");
|
||||
rootPath = fileSavePath_temp;
|
||||
String sql = "SELECT O.FULLPATH AS FULLPATH, CONCAT(REPLACE(LCI.CONTRACT_NO,'/','-'), '/','"+type+"','/', REPLACE(LDL.ONE_CLASSIFY,'/','-'), '/' , REPLACE(LDL.DOC_NAME,'/','-'), '/', REPLACE(O.FILENAME,'/','-')) AS TARGET_FILE_PATH FROM LB_DOCATTRIBUTE O"
|
||||
+" LEFT JOIN LB_DOCLIBRARY LDL ON LDL.ID = O.LIBRARY_ID"
|
||||
+" LEFT JOIN LB_DOCRELATIVE LDR ON LDL.RELATIVE_ID = LDR.ID"
|
||||
@ -126,5 +98,29 @@ public class FileCopyToOtherPath {
|
||||
System.out.println("拷贝失败的合同:"+failNo);
|
||||
return failNo;
|
||||
}
|
||||
public String getUserid() {
|
||||
return userid;
|
||||
}
|
||||
public void setUserid(String userid) {
|
||||
this.userid = userid;
|
||||
}
|
||||
public String getContractNo() {
|
||||
return contractNos;
|
||||
}
|
||||
public void setContractNos(String contractNos) {
|
||||
this.contractNos = contractNos;
|
||||
}
|
||||
public String getBatchNos() {
|
||||
return batchNos;
|
||||
}
|
||||
public void setBatchNos(String batchNos) {
|
||||
this.batchNos = batchNos;
|
||||
}
|
||||
public String getFileSavePath_temp() {
|
||||
return fileSavePath_temp;
|
||||
}
|
||||
public void setFileSavePath_temp(String fileSavePath_temp) {
|
||||
this.fileSavePath_temp = fileSavePath_temp;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,158 @@
|
||||
package com.tenwa.officetempalte.exportcallback.impl;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.util.List;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
|
||||
public class ZipUtils {
|
||||
private static final int BUFFER_SIZE = 2 * 1024;
|
||||
/**
|
||||
* 压缩成ZIP 方法1
|
||||
* @param srcDir
|
||||
* 压缩文件夹路径
|
||||
* @param out
|
||||
* 压缩文件输出流
|
||||
* @param KeepDirStructure
|
||||
* 是否保留原来的目录结构,
|
||||
* true:保留目录结构;
|
||||
* false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)
|
||||
* @throws RuntimeException
|
||||
* 压缩失败会抛出运行时异常
|
||||
*/
|
||||
public void toZip(String srcDir, OutputStream out,boolean KeepDirStructure) throws RuntimeException {
|
||||
long start = System.currentTimeMillis();
|
||||
ZipOutputStream zos = null;
|
||||
try {
|
||||
zos = new ZipOutputStream(out);
|
||||
File sourceFile = new File(srcDir);
|
||||
compress(sourceFile, zos, sourceFile.getName(), KeepDirStructure);
|
||||
long end = System.currentTimeMillis();
|
||||
System.out.println("压缩完成,耗时:" + (end - start) + " ms");
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("zip error from ZipUtils", e);
|
||||
} finally {
|
||||
if (zos != null) {
|
||||
try {
|
||||
zos.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 压缩成ZIP 方法2
|
||||
* @param srcFiles
|
||||
* 需要压缩的文件列表
|
||||
* @param out
|
||||
* 压缩文件输出流
|
||||
* @throws RuntimeException
|
||||
* 压缩失败会抛出运行时异常
|
||||
*/
|
||||
public void toZip(List<File> srcFiles, OutputStream out) throws RuntimeException {
|
||||
long start = System.currentTimeMillis();
|
||||
ZipOutputStream zos = null;
|
||||
try {
|
||||
zos = new ZipOutputStream(out);
|
||||
for (File srcFile : srcFiles) {
|
||||
byte[] buf = new byte[BUFFER_SIZE];
|
||||
zos.putNextEntry(new ZipEntry(srcFile.getName()));
|
||||
int len;
|
||||
FileInputStream in = new FileInputStream(srcFile);
|
||||
while ((len = in.read(buf)) != -1) {
|
||||
zos.write(buf, 0, len);
|
||||
}
|
||||
zos.closeEntry();
|
||||
in.close();
|
||||
}
|
||||
long end = System.currentTimeMillis();
|
||||
System.out.println("压缩完成,耗时:" + (end - start) + " ms");
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("zip error from ZipUtils", e);
|
||||
} finally {
|
||||
if (zos != null) {
|
||||
try {
|
||||
zos.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 递归压缩方法
|
||||
* @param sourceFile
|
||||
* 源文件
|
||||
* @param zos
|
||||
* zip输出流
|
||||
* @param name
|
||||
* 压缩后的名称
|
||||
* @param KeepDirStructure
|
||||
* 是否保留原来的目录结构,
|
||||
* true:保留目录结构;
|
||||
* false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)
|
||||
* @throws Exception
|
||||
*/
|
||||
private void compress(File sourceFile, ZipOutputStream zos,String name,boolean KeepDirStructure) throws Exception {
|
||||
byte[] buf = new byte[BUFFER_SIZE];
|
||||
if (sourceFile.isFile()) {
|
||||
// 向zip输出流中添加一个zip实体,构造器中name为zip实体的文件的名字
|
||||
zos.putNextEntry(new ZipEntry(name));
|
||||
// copy文件到zip输出流中
|
||||
int len;
|
||||
FileInputStream in = new FileInputStream(sourceFile);
|
||||
while ((len = in.read(buf)) != -1) {
|
||||
zos.write(buf, 0, len);
|
||||
}
|
||||
// Complete the entry
|
||||
zos.closeEntry();
|
||||
in.close();
|
||||
} else {
|
||||
File[] listFiles = sourceFile.listFiles();
|
||||
if (listFiles == null || listFiles.length == 0) {
|
||||
// 需要保留原来的文件结构时,需要对空文件夹进行处理
|
||||
if (KeepDirStructure) {
|
||||
// 空文件夹的处理
|
||||
zos.putNextEntry(new ZipEntry(name + "/"));
|
||||
// 没有文件,不需要文件的copy
|
||||
zos.closeEntry();
|
||||
}
|
||||
} else {
|
||||
for (File file : listFiles) {
|
||||
// 判断是否需要保留原来的文件结构
|
||||
if (KeepDirStructure) {
|
||||
// 注意:file.getName()前面需要带上父文件夹的名字加一斜杠,
|
||||
// 不然最后压缩包中就不能保留原来的文件结构,即:所有文件都跑到压缩包根目录下了
|
||||
compress(file, zos, name + "/" + file.getName(),KeepDirStructure);
|
||||
} else {
|
||||
compress(file, zos, file.getName(), KeepDirStructure);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 递归删除临时文件
|
||||
*/
|
||||
|
||||
public void deleteFile(File f){
|
||||
File [] b = f.listFiles();//获取包含file对象对应的子目录或者文件
|
||||
for(int i =0;i<b.length;i++){
|
||||
if(b[i].isFile()){//判断是否为文件
|
||||
b[i].delete();//如果是就删除
|
||||
}else{
|
||||
deleteFile(b[i]);//否则重新递归到方法中
|
||||
}
|
||||
}
|
||||
f.delete();//最后删除该目录中所有文件后就删除该目录
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user