之前做上传图片是采用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(安卓)imageView 自定义单个或多个角为圆角及圆形图片工
  2. ScaleImageView图片缩放查看器
  3. android ProgressBar被拉伸或压缩变形,显示不全
  4. Android手势滑动实现ImageView缩放图片大小
  5. android圆形ImageView之CircleImageView
  6. Android选择本地图片并裁剪工具类
  7. android中 关于listitem 获得焦点时,改变其背景
  8. android学习笔记4:图片显示imageVIew
  9. 实现如何Android(安卓)获得图片的总结

随机推荐

  1. MySQL性能压力基准测试工具sysbench的使
  2. Mysql MVCC机制原理详解
  3. 详解MySQL 用户权限管理
  4. mysql死锁和分库分表问题详解
  5. MySQL命令行操作时的编码问题详解
  6. Idea连接MySQL数据库出现中文乱码的问题
  7. mysql的MVCC多版本并发控制的实现
  8. mysql查询的控制语句图文详解
  9. 详解MySQL InnoDB存储引擎的内存管理
  10. MySQL Innodb关键特性之插入缓冲(insert