Android 通过Base64上传图片到服务器
来源:互联网 发布:屏幕亮点修复软件 编辑:程序博客网 时间:2024/05/01 08:09
之前做上传图片是采用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<String, Object> 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<NameValuePair> nameValuepairs = new ArrayList<NameValuePair>();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<String, Object> 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<String,Object> params = new HashMap<String, Object>();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。希望对大家有所帮助!
11 1
- Android 通过Base64上传图片到服务器
- Android 通过Base64上传图片到服务器
- Android 通过Base64上传图片到服务器
- Android 通过Base64上传图片到服务器
- Android 通过Base64上传图片到服务器
- Android Base64上传图片到 SpringMVC服务器
- Android Base64上传图片到 SpringMVC服务器
- 图片通过压 ;缩 转换成base64上传到服务器
- android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架传输)
- android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架传输)
- android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架传输)
- android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架
- android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架传输)
- android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架传输)
- android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架传输)
- android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架传输)
- android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架传输)
- android通过Base64往服务器上传图片和对象
- android图形系统详解五:Android绘制模式
- pl/sql developer 编码格式设置
- Android WebApp 開發教學 (1) – HTML5 WebView 行動應用
- hdu 1072 Nightmare--bfs
- Linux编译Windows共享目录下代码
- Android 通过Base64上传图片到服务器
- 使用ajax后,target失效,弹出新窗口
- 开源物理引擎
- Eclipse 使用配置记录
- ocaml学习
- 北风网课程开放下载第一季
- 第十讲 对象编程简介(实例补充)
- Launcher源码浅析-----涉及Workspace界面资源加载重要类和资源文件简介
- loongson 1B 开发板移植sqlite3.6.20