java端代碼 java
import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import javax.imageio.ImageIO; 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.FileUpload; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.RequestContext; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.fileupload.servlet.ServletRequestContext; public class SendServlet extends HttpServlet { private static final long serialVersionUID = -4332039959272188942L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/plain;charset=UTF-8"); resp.setCharacterEncoding("utf-8"); Map<String,Object> msgMap=new HashMap<String,Object>(); msgMap.put("retMsg","非法請求"); msgMap.put("retFlag","0"); try { PrintWriter out = resp.getWriter(); out.write(JSONUtil.convertObjectToJSON(msgMap)); out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/plain;charset=UTF-8"); // 設置響應頁面字符編碼 resp.setCharacterEncoding("utf-8"); RequestContext requestContext = new ServletRequestContext(req); Map<String, String> msgMap = new HashMap<String, String>(); if (FileUpload.isMultipartContent(requestContext)) { DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory(); ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory); //設置單個上傳文件的最大尺寸(5M) fileUpload.setFileSizeMax(1024*1024*5); // 定義文本參數的key,value String paramKey = null, paramValue = null; // 定義原圖片接收 List<Map<String, Object>> imgList = new ArrayList<Map<String, Object>>(); // 定義圖片存放路徑 String imgDir = "upload/images/"; List items = new ArrayList(); try { items = fileUpload.parseRequest(req); Iterator it = items.iterator(); while (it.hasNext()) { FileItem fileItem = (FileItem) it.next(); if (fileItem.isFormField()) {// 文本參數 paramKey = fileItem.getFieldName(); paramValue = fileItem.getString("UTF-8"); if (paramKey.equals("id")) { topicComment.setUserId(Integer.parseInt(paramValue)); } else if (paramKey.equals("name")) { topicComment.setContent(paramValue); } } else {// 圖片文件 if (fileItem.getName() != null && fileItem.getSize() != 0) { if(fileItem.getSize()> fileUpload.getFileSizeMax()){ throw new FileUploadException("File size exceeds the limit"); } File fullFile = new File(fileItem.getName()); String _pre = StringUtil.buildUniqueStr(); String imgName = _pre+ fullFile.getName().substring(fullFile.getName().lastIndexOf(".")).toLowerCase(); File newFile = new File("D:\\"+ imgDir + imgName); if (!newFile.getParentFile().exists()) { newFile.getParentFile().mkdirs(); } fileItem.write(newFile); //寫入圖片到服務器上 BufferedImage image = ImageIO.read(newFile); Map<String, Object> imgMap = new LinkedHashMap<String, Object>(); imgMap.put("imgUrl", imgDir + imgName); imgMap.put("width", image.getWidth()); imgMap.put("height", image.getHeight()); imgList.add(imgMap); } } } msgMap.put("retMsg","成功"); msgMap.put("retFlag","1"); } catch (Exception e) { msgMap.put("retMsg","失敗"); msgMap.put("retFlag","0"); } }else{ msgMap.put("retMsg","失敗"); msgMap.put("retFlag","0"); } try{ PrintWriter pw=resp.getWriter(); pw.write(JSONUtil.convertObjectToJSON(msgMap)); pw.flush(); pw.close(); }catch(Exception e){ e.printStackTrace(); } }
public class Test { /** * @param args */ public static void main(String[] args) { String actionUrl = "http://192.168.2.189/servlet/sendTopic" ; Map<String,String> params = new HashMap<String ,String >() ; params.put ( "userId" , "2" ) ; params.put ( "tiebaId" , "1" ) ; Map<String,File> files = new HashMap<String ,File>() ; files.put ( "2.png" , new File("D:\\2.png")) ; files.put ( "1.png" , new File("D:\\1.png")) ; try { String str = post( actionUrl ,params , files ) ; System.out.println ( "str--->>>" + str ) ; } catch ( Exception e ) { } } public static String post( String actionUrl ,Map < String , String > params , Map < String , File > files ) throws IOException { String BOUNDARY = java.util.UUID.randomUUID ( ).toString ( ) ; String PREFIX = "--" , LINEND = "\r\n" ; String MULTIPART_FROM_DATA = "multipart/form-data" ; String CHARSET = "UTF-8" ; URL uri = new URL ( actionUrl ) ; HttpURLConnection conn = ( HttpURLConnection ) uri .openConnection ( ) ; conn.setReadTimeout ( 5 * 1000 ) ; // 緩存的最長時間 conn.setDoInput ( true ) ;// 容許輸入 conn.setDoOutput ( true ) ;// 容許輸出 conn.setUseCaches ( false ) ; // 不容許使用緩存 conn.setRequestMethod ("POST") ; conn.setRequestProperty ( "connection" , "keep-alive" ) ; conn.setRequestProperty ( "Charsert" , "UTF-8" ) ; conn.setRequestProperty ( "Content-Type" , MULTIPART_FROM_DATA+ ";boundary=" + BOUNDARY ) ; // 首先組拼文本類型的參數 StringBuilder sb = new StringBuilder ( ) ; for ( Map.Entry < String , String > entry : params.entrySet ( ) ) { sb.append ( PREFIX ) ; sb.append ( BOUNDARY ) ; sb.append ( LINEND ) ; sb.append ( "Content-Disposition: form-data; name=\"" + entry.getKey ( ) + "\"" + LINEND ) ; sb.append ( "Content-Type: text/plain; charset=" + CHARSET + LINEND ) ; sb.append ( "Content-Transfer-Encoding: 8bit" + LINEND ) ; sb.append ( LINEND ) ; sb.append ( entry.getValue ( ) ) ; sb.append ( LINEND ) ; } DataOutputStream outStream = new DataOutputStream (conn.getOutputStream ( ) ) ; outStream.write ( sb.toString ( ).getBytes ( ) ) ; // 發送文件數據 if ( files != null ) for ( Map.Entry < String , File > file : files.entrySet ( ) ) { StringBuilder sb1 = new StringBuilder ( ) ; sb1.append ( PREFIX ) ; sb1.append ( BOUNDARY ) ; sb1.append ( LINEND ) ; sb1.append ( "Content-Disposition: form-data; name=\"file\"; filename=\"" + file.getKey ( ) + "\"" + LINEND ) ; sb1.append ( "Content-Type: application/octet-stream; charset=" + CHARSET + LINEND ) ; sb1.append ( LINEND ) ; outStream.write ( sb1.toString ( ).getBytes ( ) ) ; InputStream is = new FileInputStream ( file.getValue ( ) ) ; byte [ ] buffer = new byte [ 1024 ] ; int len = 0 ; while ( ( len = is.read ( buffer ) ) != - 1 ) { outStream.write ( buffer , 0 , len ) ; } is.close ( ) ; outStream.write ( LINEND.getBytes ( ) ) ; } // 請求結束標誌 byte [ ] end_data = ( PREFIX + BOUNDARY + PREFIX + LINEND ).getBytes ( ) ; outStream.write ( end_data ) ; outStream.flush ( ) ; // 獲得響應碼 int res = conn.getResponseCode ( ) ; InputStream in = conn.getInputStream ( ) ; StringBuilder sb2=null; if ( res == 200 ) { int ch ; sb2 = new StringBuilder ( ) ; while ( ( ch = in.read ( ) ) != - 1 ) { sb2.append ( ( char ) ch ) ; } } outStream.close ( ) ; conn.disconnect ( ) ; return new String(sb2.toString().getBytes("ISO-8859-1"),"UTF-8") ; } }