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是一种常见的数据编码方式,它将二进制数据转换为可打印的ASCII字符串,便于在网络传输、存储或者显示时使用。本文将深入探讨如何使用Android的Base64库来对图片进行编码和解码。 ### 1. ...
Base64编码是一种在网络上传输二进制数据时常用的编码方式,主要目的是将不可打印的字符转换为可打印的ASCII字符,确保数据在通过电子邮件、HTML或XML等文本格式传输时不受损坏。在Java中,Base64编码常用于处理图片...
Base64是一种将二进制数据转化为可打印字符的编码方式,常用于在网络上传输非ASCII字符的数据。以下是实现这一功能所需的关键知识点: 1. **MediaRecorder**:Android提供的MediaRecorder类是录制视频的核心工具。...
Base64是一种用于将二进制数据转换为可打印字符的编码方式,常用于在网络上传输图片或者存储在文本格式的数据中。本文将深入探讨Android中图片与Base64之间的转换,并提供相关的实现方法。 一、Base64编码原理 Base...
在Android应用开发中,经常会遇到需要用户通过相机或相册选择图片,并将其处理为特定格式,如Bitmap或Base64编码。以下将详细介绍如何实现这个功能。 首先,我们需要请求存储和相机权限。在AndroidManifest.xml文件...
为了优化传输效率,可能会使用GZIP或Base64等编码方式减小数据量。GZIP可以对原始数据进行压缩,减少传输的数据量;Base64则是一种将字节流转换为可打印字符的方法,方便在网络中传输。 考虑到实时性,项目可能采用...
Base64是一种在网络上传输和存储二进制数据时常用的数据编码方式,它将二进制数据转换为可打印的ASCII字符序列。在Java中,Base64编码主要用于处理包含二进制数据的字符串,例如图片、PDF文档或加密密钥等。Base64...
Base64是一种用64个字符(A-Z, a-z, 0-9, + 和 /)来表示二进制数据的编码方式,为了确保编码后的字符串在网络上传输时不受影响,还添加了一个等于号(=)作为填充。当图像文件被转换为Base64字符串后,这个字符串...
Base64是一种将二进制数据转换为ASCII字符的编码方式,常用于在电子邮件、HTML和XML等不支持二进制传输的环境中传递图片。将剪切板上的图片转换为Base64String,可以使图片数据以文本形式在网络上传输,避免了二进制...
在IT行业中,Base64是一种常见的数据编码方法,它将...使用这样的工具或代码,用户可以方便地对文件进行Base64编码和解码操作,以便在不同场景下使用。理解并掌握Base64编码对于IT专业人士来说是非常基础且重要的技能。
本教程主要讲解如何实现Android客户端通过Base64编码方式上传图片到基于Spring MVC的服务器。我们将涵盖以下关键知识点: 1. **Android图像处理**: - 使用`Bitmap`对象从资源、文件或相机获取图片。 - 使用`...
接下来,我们需要将图片转换为可上传的格式,通常是Base64编码的字符串或二进制数据。可以使用BitmapFactory解析Uri,然后将其转换为字节数组: ```java Bitmap bitmap = BitmapFactory.decodeStream...
总结来说,`base64.jar`在Android开发中扮演着重要角色,它简化了二进制数据的编码和解码过程,并与其他加密库结合,为应用程序提供了安全的数据传输和存储解决方案。理解和掌握如何正确使用这个工具包,对于提升...
Base64编码是一种广泛应用于网络数据传输和存储的编码方式,尤其在XML、JSON等格式中常用来编码二进制数据。它的主要目的是将不可打印的二进制数据转化为可打印的ASCII字符,以确保数据在网络传输过程中的稳定性和...
6. **编码与解码**:在传输过程中,文件可能需要被编码成适合网络传输的格式,如Base64编码,以确保数据的完整性和安全性。在接收端,文件会被解码并恢复成原始格式。 7. **权限管理**:在Android中,文件传输可能...
可以使用Android提供的Bitmap类和相关方法来调整图片尺寸,然后使用Base64.encodeToString()方法将其转换为字符串。 3. **网络权限**: Android应用需要在AndroidManifest.xml文件中添加相应的网络权限,如 `...
在远程图片上传过程中,开发者通常需要创建一个HTTP POST请求,携带图片数据(可能是Base64编码的字符串或者二进制流)到服务器端。XFire可以帮助我们构建这样的请求,并处理服务器返回的结果。 下载图片时,XFire...
对于接收图片的接口,通常定义一个POST方法,接受一个字符串参数,这个参数就是Android上传的Base64编码的图片数据。接口处理完成后,返回一个状态码或者响应消息,告诉客户端操作是否成功。 6. **安全与性能优化**...
Base64是一种常见的二进制数据编码方式,它可以将任何二进制数据转化为ASCII字符,这样就可以在文本格式中安全地传输和存储。在Android中,图像文件(例如JPEG或PNG)是二进制数据,无法直接存入Shared Preferences...
在Android端,接收Base64编码的加密数据,使用`RSAPublicKey`进行解密,这同样可以通过`Cipher`类完成。 在实际应用中,为了确保安全,C#和Android之间可能需要通过HTTPS等安全通道交换公钥,避免在传输过程中被...