java模拟http请求,同时上传多个文件及参数(Servlet)

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);
	}

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值