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;@Overrideprotected 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();}}@Overrideprotected 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,valueString 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();}}



模拟android客户端发送数据:

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



更多相关文章

  1. Android(安卓)自定义Dialog时出现成员变量为null的问题
  2. Android(安卓)RadioButton 图片位置和大小
  3. Android(安卓)图片缩放
  4. Android的drawable文件夹的说明
  5. Android长按imageview把图片保存到本地
  6. android图片压缩 —— 2
  7. MUI调用自定义插件(Android)
  8. Android(安卓)实现图片的放大缩小及左右滑动(说明书效果)
  9. Android(安卓)Drawable绘图

随机推荐

  1. Animation
  2. Android (Android Studio)(Java) 实现Vie
  3. Android(安卓)adb ubuntu 64bit 不能运行
  4. Android在全屏状态下键盘覆盖输入框问题
  5. 设置无标题&设置不显示状态栏
  6. Android 判断点是否在Path中(含不规则形
  7. Android 利用方向传感器实现 指南针
  8. Android桌面小部件实例 桌面小时钟
  9. android中小知识点积累
  10. Android(安卓)网页登录 POST 请求 保存 C