代码可实现文本域及非文本域的处理
请求代码:
/** * 上传 * * @param urlStr * @param textMap * @param fileMap * @return */ public static String formUpload(String urlStr, Map<String, String> textMap, Map<String, String> fileMap) { String res = ""; HttpURLConnection conn = null; String BOUNDARY = "---------------------------123821742118716"; //boundary就是request头和上传文件内容的分隔符 try { URL url = new URL(urlStr); conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5000); conn.setReadTimeout(30000); conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false); conn.setRequestMethod("POST"); conn.setRequestProperty("Connection", "Keep-Alive"); conn .setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)"); conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY); OutputStream out = new DataOutputStream(conn.getOutputStream()); // text if (textMap != null) { StringBuffer strBuf = new StringBuffer(); Iterator iter = textMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); String inputName = (String) entry.getKey(); String inputValue = (String) entry.getValue(); if (inputValue == null) { continue; } strBuf.append("\r\n").append("--").append(BOUNDARY).append( "\r\n"); strBuf.append("Content-Disposition: form-data; name=\"" + inputName + "\"\r\n\r\n"); strBuf.append(inputValue); } out.write(strBuf.toString().getBytes()); } // file if (fileMap != null) { Iterator iter = fileMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); String inputName = (String) entry.getKey(); String inputValue = (String) entry.getValue(); if (inputValue == null) { continue; } File file = new File(inputValue); String filename = file.getName(); String contentType = new MimetypesFileTypeMap() .getContentType(file); if (filename.endsWith(".png")) { contentType = "image/png"; } if (contentType == null || contentType.equals("")) { contentType = "application/octet-stream"; } StringBuffer strBuf = new StringBuffer(); strBuf.append("\r\n").append("--").append(BOUNDARY).append( "\r\n"); strBuf.append("Content-Disposition: form-data; name=\"" + inputName + "\"; filename=\"" + filename + "\"\r\n"); strBuf.append("Content-Type:" + contentType + "\r\n\r\n"); out.write(strBuf.toString().getBytes()); DataInputStream in = new DataInputStream( new FileInputStream(file)); int bytes = 0; byte[] bufferOut = new byte[1024]; while ((bytes = in.read(bufferOut)) != -1) { out.write(bufferOut, 0, bytes); } in.close(); } } byte[] endData = ("\r\n--" + BOUNDARY + "--\r\n").getBytes(); out.write(endData); out.flush(); out.close(); // 读取返回数据 StringBuffer strBuf = new StringBuffer(); BufferedReader reader = new BufferedReader(new InputStreamReader( conn.getInputStream())); String line = null; while ((line = reader.readLine()) != null) { strBuf.append(line).append("\n"); } res = strBuf.toString(); reader.close(); reader = null; } catch (Exception e) { System.out.println("发送POST请求出错。" + urlStr); e.printStackTrace(); } finally { if (conn != null) { conn.disconnect(); conn = null; } } return res; }
处理上传请求代码:
/** * 上传 * @param request * @param response * @throws Exception */ public void doUpload(HttpServletRequest request, HttpServletResponse response)throws Exception { String jsession = request.getParameter("jsessionid"); System.out.println(jsession); HttpSession s = request.getSession(); System.out.println(s.getId()); DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置内存缓冲区,超过后写入临时文件 factory.setSizeThreshold(10240000); ServletFileUpload upload = new ServletFileUpload(factory); // 设置单个文件的最大上传值 upload.setFileSizeMax(10002400000l); // 设置整个request的最大值 upload.setSizeMax(10002400000l); upload.setHeaderEncoding("UTF-8"); //Date now = new Date(); Map map = new HashMap(); File tmpFile = new File(tmpFilePath); if(!tmpFile.exists()) tmpFile.mkdirs(); List items = null; try { items = upload.parseRequest(request); } catch (FileUploadException e) { throw new RuntimeException(e); } if (items == null) return ; Date date = new Date(); Iterator iter = items.iterator(); String fileName = tmpFilePath + File.separator +date.getTime(); while (iter.hasNext()) {// 循环获得每个表单项 FileItem item = (FileItem) iter.next(); if (item.isFormField()) { String name = item.getFieldName(); try { String value = item.getString("utf-8");// 如果参数里面有中文,防止出现乱码 map.put(name, value); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } }else if(item.getName().length() > 0) { String namefix = item.getName(); namefix = namefix.substring(namefix.lastIndexOf(".")); fileName = fileName +namefix; item.write(new File(fileName)); } } String type =(String) map.get("type"); if(type.equals("war")){ request.getSession().setAttribute("warFileName",fileName); }else if(type.equals("sql")){ request.getSession().setAttribute("sqlFileName",fileName); } try { map.put("data", fileName); response.getWriter().write(JsonUtils.convertToString(map)); } catch (IOException e) { e.printStackTrace(); } }
测试调用代码:
/** * @param args */ public static void main(String[] args) { String filepath="D:\\test\\PPGhost.war"; String urlStr = "http://localhost:8080/iopm/version/add.do?method=upload"; Map<String, String> textMap = new HashMap<String, String>(); textMap.put("name", "testname"); textMap.put("type", "war"); Map<String, String> fileMap = new HashMap<String, String>(); fileMap.put("userfile", filepath); String ret = formUpload(urlStr, textMap, fileMap); System.out.println(ret); }
时间: 2024-10-04 07:25:14