Android 通过Base64上传图片到服务器

之前做上传图片是采用HttpServlet上传,不过用了一下Base64上传图片后,感觉比HttpServlet方便很多,大家也可以跟着尝试一下。

前台图片处理:(传Bitmap对象即可)

/**  * 通过Base32将Bitmap转换成Base64字符串  * @param bit  * @return  */ public String Bitmap2StrByBase64(Bitmap bit){   ByteArrayOutputStream bos=new ByteArrayOutputStream();   bit.compress(CompressFormat.JPEG, 40, bos);//参数100表示不压缩   byte[] bytes=bos.toByteArray();   return Base64.encodeToString(bytes, Base64.DEFAULT); } 

 前台发送数据:(�{用setImgByStr()方法,第一�����imgStr 为Bitmap转成Base64的字符串,第二个参数imgName为图片的名字,包含后缀名.jpg)

public static String host = "http://192.168.1.166:8080/ImageServer/";  public static String getContent(String url) throws Exception {    StringBuilder sb = new StringBuilder();    HttpClient client = new DefaultHttpClient();   HttpParams httpParams = client.getParams();   // 设置网络超时参数   HttpConnectionParams.setConnectionTimeout(httpParams, 3000);    HttpConnectionParams.setSoTimeout(httpParams, 5000);   HttpResponse response = client.execute(new HttpGet(url));   HttpEntity entity = response.getEntity();   if (entity != null) {     BufferedReader reader = new BufferedReader(new InputStreamReader(         entity.getContent(), "UTF-8"), 8192);      String line = null;     while ((line = reader.readLine()) != null) {       sb.append(line + "\n");     }     reader.close();    }    return sb.toString(); } public static HttpResponse post(Map params, String url) {    HttpClient client = new DefaultHttpClient();   HttpPost httpPost = new HttpPost(url);   httpPost.addHeader("charset", HTTP.UTF_8);   httpPost.setHeader("Content-Type",       "application/x-www-form-urlencoded; charset=utf-8");   HttpResponse response = null;   if (params != null && params.size() > 0) {     List nameValuepairs = new ArrayList();     for (String key : params.keySet()) {       nameValuepairs.add(new BasicNameValuePair(key, (String) params           .get(key)));     }     try {       httpPost.setEntity(new UrlEncodedFormEntity(nameValuepairs,           HTTP.UTF_8));       response = client.execute(httpPost);     } catch (UnsupportedEncodingException e) {       e.printStackTrace();     } catch (ClientProtocolException e) {       e.printStackTrace();     } catch (IOException e) {       e.printStackTrace();     } catch (RuntimeException e) {       e.printStackTrace();     }   } else {     try {       response = client.execute(httpPost);     } catch (ClientProtocolException e) {       e.printStackTrace();     } catch (IOException e) {       e.printStackTrace();     }   }    return response;  } public static Object getValues(Map params, String url) {   String token = "";   HttpResponse response = post(params, url);   if (response != null) {     try {       token = EntityUtils.toString(response.getEntity());       response.removeHeaders("operator");     } catch (ParseException e) {       e.printStackTrace();     } catch (IOException e) {       e.printStackTrace();     }   }   return token; } public static Object setImgByStr(String imgStr,String imgName){   String url = host+"channel-uploadImage.action";   Map params = new HashMap();   params.put("imgStr", imgStr);   params.put("imgName", imgName);   return getValues(params, url); } 

 后台接收数据:

public void uploadPhoto() {   //获取存储路径   HttpServletRequest request = ServletActionContext.getRequest();   String path = ServletActionContext.getServletContext().getRealPath("/")+"upload";   File file = new File(path);   if(!file.exists()){     file.mkdir();   }   String imgPath = path + request.getParameter("imgName");   String imgStr = request.getParameter("imgStr");   boolean flag = string2Image(imgStr, imgPath);   JacksonUtil.responseJSON(response, flag); } 

 后台图片处理:

/**  * 通过BASE64Decoder解码,并生成图片  * @param imgStr 解码后的string  */ public boolean string2Image(String imgStr, String imgFilePath) {   // 对字节数组字符串进行Base64解码并生成图片   if (imgStr == null)     return false;   try {     // Base64解码     byte[] b = new BASE64Decoder().decodeBuffer(imgStr);     for (int i = 0; i < b.length; ++i) {       if (b[i] < 0) {         // 调整异常数据         b[i] += 256;       }     }     // 生成Jpeg图片     OutputStream out = new FileOutputStream(imgFilePath);     out.write(b);     out.flush();     out.close();     return true;   } catch (Exception e) {     return false;   } }   

OK ! 如果成功上传前端会接收到true ,反之失败false。希望对大家有所帮助!

更多相关文章

  1. Android点击WebView中的图片查看大图
  2. Android(安卓)L下用XXRadius设置圆角背景图片不能显示
  3. Android快速开发框架——Afinal 0.5 发布!
  4. android arcgis(100.0.0)ArcGISMapImageLayer 图片图层点击查询要
  5. android实现图片加水印
  6. java获取http:图片下载代码――android基础编
  7. window.navigator.userAgent的用处
  8. Android(安卓)图片缩放 BitmapFactory详解
  9. Android(安卓)线程以及提示消息框

随机推荐

  1. CardView 添加背景图片、改变颜色、水波
  2. Android之Android(安卓)apk动态加载机制
  3. Android设置TextView的渐变颜色、方向和
  4. 阿里巴巴Android开发手册
  5. android:getSlotFromBufferLocked: unknow
  6. Handler机制深入解析
  7. 浅谈Android五大布局
  8. 文章关键字 ‘nodpi’
  9. 虎牙 安卓开发面试 问题整理(2018.3.6)
  10. 浅谈Android系统进程间通信(IPC)机制Binder