Android上传图片到服务器,android-async-http上传图片到服务器

背景:最近遇到Android上传图片到服务器,今天研究了一下,还挺简单的,我用的是android-async-http,版本是1.4.4。

工具下载地址:https://github.com/loopj/android-async-http/tree/1.4.6/releases

官网也有介绍:http://loopj.com/android-async-http/

Android源码片段:

private void uploadImage()
	{
		//上传请求地址
		String url="http://172.16.3.129:8082/jd-web/FileUpload.do?cmd=uploadFiles";
		try {
			String imageUrl="/storage/sdcard0/upload/yellow.jpg";
			RequestParams params=new RequestParams();
			//params.add("cmd","uploadFiles");//接口名
			//params.add("albumId","93345");//相册ID
			//上传的时候,下面这个参数是最主要的,就是设置文件的地方,其中put方法的第一个参数的值无所谓,没有什么要求,
			//开始我一直以为是一个特定的值,然后服务器会根据这个key来取值,后来发现不是,这个可以随便取,
			//第三个参数"application/octet-stream",也可以不传,我发现服务器端可以自动识别。
			//params.put("image", new File(imageUrl),"application/octet-stream");
			params.put("profile_picture", new File(imageUrl));
			HttpUtil.post(url,params, uploadResponseHander());
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			tvShowLog.setText("参数设置错误");
		}
	}

	/**
	 * 上传回调
	 * @return
	 */
	private AsyncHttpResponseHandler uploadResponseHander()
	{
		return new AsyncHttpResponseHandler()
		{
			@Override
			public void onSuccess(int statusCode, Header[] headers, byte[] responseBody)
			{
				String content=new String(responseBody);
				tvShowLog.setText("上传完成:"+content);
			}
			@Override
			public void onFailure(int statusCode, Header[] headers,
					byte[] responseBody, Throwable error)
			{
				tvShowLog.setText("上传失败");
			}
		};
	}


服务器端源码片段:

	@RequestMapping(params="cmd=uploadFiles")
	@ResponseBody
	public JsonResult uploadFiles(@RequestParam Integer albumId,HttpServletRequest  request, HttpServletResponse response){
		JsonResult jsonResult = new JsonResult(true);
		try {
			//转换request为MultipartHttpServletRequest  
			MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;  
			//获取文件集合 
			Map fileMap = multipartRequest.getFileMap();
			//遍历多媒体文件  
			for (Map.Entry entity : fileMap.entrySet()) {
				//获取多媒体文件信息
				MultipartFile mf = entity.getValue();  
				//获取字节数组,这个是最重要的,这个字节数组就是刚才上传的文件转换而成的
				byte[] bytes = mf.getBytes();
				//获取上传的文件的名字
				String fileName = mf.getOriginalFilename();  
			}
		} catch (Exception e) 
		{
		}
		return jsonResult;
	}

可以使用Spring的Util包中FileCopyUtils工具类,将此字节数组保存成本地的图片文件:

FileCopyUtils.copy(mf.getBytes(), “D:\ImageUpload\xxx.jpg);

OK,到此为止


你可能感兴趣的:(Android)