`
xiaoliefengfeng
  • 浏览: 67819 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于android图片的传输,android图片传输方式,xml传输图片,android 使用base64编码图片使用xml传输图片

阅读更多

1.android客服端上传图片到服务器,使用的xml来传输base64编码后的图片
 我使用的是android自带的httpclient来发送post请求的,我也想过自己使用post方式来发送数据,但是,数据在服务器端进行base64解码的时候保存,我也没找出原因,所以就没写出来了

 发送post请求就是因为post允许一次传输的数据量大,因为图片经过base64编码后,数据量大,如果采用get或者其他的方式来传输数据,传输效率不过,而且数据量大小受到限制

 1.获取android客服端图片

  //对文件的操作
  FileInputStream in = new FileInputStream(Environment.getExternalStorageDirectory() + "/images/musicmax.png");
  byte buffer[] = StreamUtil.read(in);//把图片文件流转成byte数组
  byte[] encod = Base64.encode(buffer,Base64.DEFAULT);//使用base64编码

 
 2.发送post请求,注意android客服端访问网络记得要加访问网络的权限

 String path ="http://192.168.1.173:7999/videonews/TestServlet"; 
 Map<String, String> params = new HashMap<String, String>();//定义一个保存key-value的Map用于保存需要传输的数据
 
 params.put("value", new String(encod));//保存数据到map对象
 Log.i(TAG,new String(encod));
 if(StreamUtil.sendHttpClientPOSTRequest(path, params, "utf-8")){//使用帮助类来发送HttpClient来发送post请求
  Log.i(TAG, "success :" + path + "----:decode:----" + new String(Base64.decode(encod, Base64.DEFAULT)));
 }

 
2.服务器端的代码

String value = request.getParameter("value");//获取value的值
 FileOutputStream fileout = new FileOutputStream("c:/music.png");//设置文件保存在服务器的什么位置
 fileout.write(com.sun.org.apache.xml.internal.security.utils.Base64.decode(value.getBytes()));//使用base64解码
 fileout.close();

 
 StreamUtil帮助类里面完整代码

public class StreamUtil {
 /**
  * 返回字节数组
  * 
  * @param in输入的流
  * @return
  * @throws Exception
  */

 public static byte[] read(InputStream in) throws Exception {
  ByteArrayOutputStream out = new ByteArrayOutputStream();
  if (in != null) {
   byte[] buffer = new byte[1024];
   int length = 0;
   while ((length = in.read(buffer)) != -1) {
    out.write(buffer, 0, length);
   }
   out.close();
   in.close();
   return out.toByteArray();
  }
  return null;
 }
 
 /**
  * 采用HttpClient发送POST请求
  * @param path 请求路径
  * @param params 请求参数
  * @throws Exception
  */
 public static boolean sendHttpClientPOSTRequest(String path, Map<String, String> params, String encoding) throws Exception{
  List<NameValuePair> param = new ArrayList<NameValuePair>();
  if(params!=null && !params.isEmpty()){
   for(Map.Entry<String, String> entry : params.entrySet()){
    param.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
   }
  }
  UrlEncodedFormEntity entity = new UrlEncodedFormEntity(param, encoding);
  HttpPost post = new HttpPost(path);
//  HttpGet get = new HttpGet();
  post.setEntity(entity);
  DefaultHttpClient client = new DefaultHttpClient();
  HttpResponse response = client.execute(post);
  if(response.getStatusLine().getStatusCode() == 200){
//   response.getEntity().getContent();//获取服务器返回的数据
   return true;
  }
  return false;
 }
}

 关于自己写post请求的代码,这个代码我测试过,在服务器对传输过来的数据进行base64解码的时候总报错,具体的原因我也没找出来,下面我贴出来代码,希望朋友们帮我找找原因

/*//对文件的操作  注:此方法测试有问题
					FileInputStream in = new FileInputStream(Environment.getExternalStorageDirectory() + "/images/musicmax.png");
					byte buffer[] = StreamUtil.read(in);
					byte[] encod = Base64.encode(buffer,Base64.DEFAULT);
					
					StringBuffer sb = new StringBuffer("value=");
					URL url = new URL(path);
					HttpURLConnection conn = (HttpURLConnection) url.openConnection();
					
					conn.setConnectTimeout(5 * 1000);
					conn.setRequestMethod("POST");
					conn.setDoOutput(true);//允许对外输出数据
					conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
					conn.setRequestProperty("Content-Length", (sb.toString().getBytes().length + encod.length) + "");
					OutputStream outs = conn.getOutputStream();
										outs.write(sb.toString().getBytes());
					outs.write(encod);
					outs.close();
					Log.i(TAG,new String(encod));
					if(conn.getResponseCode() == 200){
												Log.i(TAG, "success :" + path + "----:decode:----" + new String(Base64.decode(encod, Base64.DEFAULT)));
//下面的代码是测试是否解码后能生成对应的图片没
//						FileOutputStream fileout = new FileOutputStream(Environment.getExternalStorageDirectory() + "/images/musicmax1.png");
//						fileout.write(Base64.decode(encod, Base64.DEFAULT));
//						fileout.close();
					}

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Android.Base64对图片进行编码和解码

    在Android开发中,Base64是一种常见的数据编码方式,它将二进制数据转换为可打印的ASCII字符串,便于在网络传输、存储或者显示时使用。本文将深入探讨如何使用Android的Base64库来对图片进行编码和解码。 ### 1. ...

    Base64编码jar包

    Base64编码是一种在网络上传输二进制数据时常用的编码方式,主要目的是将不可打印的字符转换为可打印的ASCII字符,确保数据在通过电子邮件、HTML或XML等文本格式传输时不受损坏。在Java中,Base64编码常用于处理图片...

    android录制视频并转为Base64格式

    Base64是一种将二进制数据转化为可打印字符的编码方式,常用于在网络上传输非ASCII字符的数据。以下是实现这一功能所需的关键知识点: 1. **MediaRecorder**:Android提供的MediaRecorder类是录制视频的核心工具。...

    安卓图片和base64转换

    Base64是一种用于将二进制数据转换为可打印字符的编码方式,常用于在网络上传输图片或者存储在文本格式的数据中。本文将深入探讨Android中图片与Base64之间的转换,并提供相关的实现方法。 一、Base64编码原理 Base...

    调用相机相册获取图片bitmap,转化成base64

    在Android应用开发中,经常会遇到需要用户通过相机或相册选择图片,并将其处理为特定格式,如Bitmap或Base64编码。以下将详细介绍如何实现这个功能。 首先,我们需要请求存储和相机权限。在AndroidManifest.xml文件...

    android实时图片传输

    为了优化传输效率,可能会使用GZIP或Base64等编码方式减小数据量。GZIP可以对原始数据进行压缩,减少传输的数据量;Base64则是一种将字节流转换为可打印字符的方法,方便在网络中传输。 考虑到实时性,项目可能采用...

    Base64引入包

    Base64是一种在网络上传输和存储二进制数据时常用的数据编码方式,它将二进制数据转换为可打印的ASCII字符序列。在Java中,Base64编码主要用于处理包含二进制数据的字符串,例如图片、PDF文档或加密密钥等。Base64...

    Android中对图像进行Base64编码

    Base64是一种用64个字符(A-Z, a-z, 0-9, + 和 /)来表示二进制数据的编码方式,为了确保编码后的字符串在网络上传输时不受影响,还添加了一个等于号(=)作为填充。当图像文件被转换为Base64字符串后,这个字符串...

    用Delphi写的从剪切板获取图片Base64String的ActiveX插件

    Base64是一种将二进制数据转换为ASCII字符的编码方式,常用于在电子邮件、HTML和XML等不支持二进制传输的环境中传递图片。将剪切板上的图片转换为Base64String,可以使图片数据以文本形式在网络上传输,避免了二进制...

    文件转化为base64字符串

    在IT行业中,Base64是一种常见的数据编码方法,它将...使用这样的工具或代码,用户可以方便地对文件进行Base64编码和解码操作,以便在不同场景下使用。理解并掌握Base64编码对于IT专业人士来说是非常基础且重要的技能。

    Android上传图片到springmvc服务器全

    本教程主要讲解如何实现Android客户端通过Base64编码方式上传图片到基于Spring MVC的服务器。我们将涵盖以下关键知识点: 1. **Android图像处理**: - 使用`Bitmap`对象从资源、文件或相机获取图片。 - 使用`...

    Android图片上传服务器

    接下来,我们需要将图片转换为可上传的格式,通常是Base64编码的字符串或二进制数据。可以使用BitmapFactory解析Uri,然后将其转换为字节数组: ```java Bitmap bitmap = BitmapFactory.decodeStream...

    base64.jar

    总结来说,`base64.jar`在Android开发中扮演着重要角色,它简化了二进制数据的编码和解码过程,并与其他加密库结合,为应用程序提供了安全的数据传输和存储解决方案。理解和掌握如何正确使用这个工具包,对于提升...

    Android数据加密之Base64编码算法的简单实现

    Base64编码是一种广泛应用于网络数据传输和存储的编码方式,尤其在XML、JSON等格式中常用来编码二进制数据。它的主要目的是将不可打印的二进制数据转化为可打印的ASCII字符,以确保数据在网络传输过程中的稳定性和...

    基于android的无线文件传输

    6. **编码与解码**:在传输过程中,文件可能需要被编码成适合网络传输的格式,如Base64编码,以确保数据的完整性和安全性。在接收端,文件会被解码并恢复成原始格式。 7. **权限管理**:在Android中,文件传输可能...

    Android利用webservice上传图片至服务器_Android端

    可以使用Android提供的Bitmap类和相关方法来调整图片尺寸,然后使用Base64.encodeToString()方法将其转换为字符串。 3. **网络权限**: Android应用需要在AndroidManifest.xml文件中添加相应的网络权限,如 `...

    安卓Android源码——在Android远程上传以及下载图片---XFire框架.zip

    在远程图片上传过程中,开发者通常需要创建一个HTTP POST请求,携带图片数据(可能是Base64编码的字符串或者二进制流)到服务器端。XFire可以帮助我们构建这样的请求,并处理服务器返回的结果。 下载图片时,XFire...

    webservice接收安卓上传图片

    对于接收图片的接口,通常定义一个POST方法,接受一个字符串参数,这个参数就是Android上传的Base64编码的图片数据。接口处理完成后,返回一个状态码或者响应消息,告诉客户端操作是否成功。 6. **安全与性能优化**...

    base64 sharedpreference保存图像

    Base64是一种常见的二进制数据编码方式,它可以将任何二进制数据转化为ASCII字符,这样就可以在文本格式中安全地传输和存储。在Android中,图像文件(例如JPEG或PNG)是二进制数据,无法直接存入Shared Preferences...

    C#Android互通RSA加密解密

    在Android端,接收Base64编码的加密数据,使用`RSAPublicKey`进行解密,这同样可以通过`Cipher`类完成。 在实际应用中,为了确保安全,C#和Android之间可能需要通过HTTPS等安全通道交换公钥,避免在传输过程中被...

Global site tag (gtag.js) - Google Analytics