java后台接收android客户端通过http方式发送的数据

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



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



转载于:https://my.oschina.net/u/1182602/blog/338967

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值