package com.acconsys.servlet;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.acconsys.chs.CHS4LCA.CallLCAFileUpload;
import com.acconsys.chs.CHSService.impl.DoReveiveVCIListMethod;
import com.acconsys.chs.CHSService.util.SFTPUtil;
public class FileUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public FileUploadServlet() {
super();
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
Properties p = new Properties();
try {
p.load(DoReveiveVCIListMethod.class.getClassLoader()
.getResourceAsStream("cisConfig.properties"));
} catch (IOException e1) {
e1.printStackTrace();
}
Map<String, String> parmaeters = new HashMap<String, String>();
// 创建磁盘工厂 缓冲区和磁盘目录
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置文件上传的大小限制
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setFileSizeMax(1024 * 1024 * 800);// 最大上传800M
upload.setHeaderEncoding("UTF-8");// 设置编码格式
// 注册获取前台的值
@SuppressWarnings("unchecked")
List<FileItem> files = null;
try {
files = upload.parseRequest(request);
} catch (FileUploadException e) {
e.printStackTrace();
}
for (FileItem fileItem : files) {
// 判断当前的数据时文件还是普通的表单
// 是文件
if (fileItem.isFormField()) {
String name = fileItem.getFieldName();// 获取属性的名字
String value = fileItem.getString("utf-8");// 获取属性的值
parmaeters.put(name, value);
} else {
// 是表单
// 获取文件上传的文件名
String name = fileItem.getFieldName();
// 定义一个新的文件来接收
String prefixpath = request.getSession().getServletContext()
.getRealPath("/");
File tplDir = new File(prefixpath + "WEB-INF\\temp");
if (!tplDir.exists()) {
tplDir.mkdirs();
}
File file = new File(prefixpath + "WEB-INF\\temp"
+ File.separator + name);
file.createNewFile();
try {
fileItem.write(file);
} catch (Exception e) {
e.printStackTrace();
}
fileItem.delete();
// 将文件上传至sftp
SFTPUtil sftp = new SFTPUtil(p.getProperty("sftp.username"),
p.getProperty("sftp.password"),
p.getProperty("sftp.ip"), Integer.valueOf(p
.getProperty("sftp.port")));
sftp.login();
try {
InputStream is = new FileInputStream(file);
sftp.upload(p.getProperty("sftp.basePath"),
p.getProperty("sftp.directory"), name, is);
} catch (Exception e) {
System.out.println("上传至SFTP服务器失败!");
}
// 调用LCA接口
CallLCAFileUpload service = new CallLCAFileUpload();
String param = name.replace(".zip", ".xml") + " " + name + " "
+ p.getProperty("sftp.basePath")
+ p.getProperty("sftp.directory")+"/";
String batchCommand;
if(parmaeters.get("order")==null){//调用的是同步设计成熟度接口
batchCommand = "CHSStatusSYN";
}else{
batchCommand = "CHSFileUpload";
}
// 返回结果
String result = service.callLCAFileUpload(param, batchCommand);
System.out.println(result);
// lca响应结果返回给CHS客户端
response.getOutputStream().println(result);
// 根据batchCommand参数判断用户点击的按钮类型
if (parmaeters.get("order").equals("check")) {//用户点击的是提交待审签按钮
//根据LCA返回结果,确定是否锁定设计
//1.从sftp下载结果文件(下载失败,返回错误结果)
//2.解析结果文件
//3.从sftp将结果文件删除
}
}
}
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}