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();
}
分享到:
相关推荐
VB6实现图片和BASE64之间的转换,巧用XML,通用性好,可以用于将图片远程上传服务器,保存数据库,或才接收服务器图片数据后,转换成图片本地显示。
Base64编码jar包,下载之后导入工程项目中即可使用。具体使用方法在:http://blog.csdn.net/junhuahouse
使用Base64编解码图片的小例子,希望可以对您的学习有帮助。
java语言,支持把xml进行base64加密后作为参数,或者使用未加密的xml作为参数,直接生成pdf图片,具体逻辑可在代码中自行调整。
java语言,支持把xml进行base64加密后作为参数,或者使用未加密的xml作为参数,直接生成png图片,具体逻辑可在代码中自行调整。
后来,我们把图片数据转换为Base64编码,替代了原先存储图片路径的方式。 转换流程 将图片转化为Base64字符串的流程是:首先使用BinaryFormatter将图片文件序列化为二进制数据,然后使用Convert类的ToBase64String...
android使用xml实现一些常用的背景图,常见的按钮样式,文本编辑框布局等
用JDOM+Base64编码存储和读取图片进XML,很经典,分析很详细
(我把整个项目的配置文件都打包了,看着有点大,其实app大小只有2.3M)Android 中使用webp,一行代码使用,缩小app体积,Android中图片优化之WebP使用
Base64其实是一种简单的置换加密方式,但是BASE64的用处往往并不是为了防止信息泄露,而且为了方便传输,进过BASE64编码后的信息会比原始信息长,大概是4/3倍。 Base64是一种基于64个可打印字符来表示二进制数据的...
Android中使用xml的操作,根据集合创建xml文件使用Pull的方式创建xml文件
使用方法如下: 在jdk环境配置好的前提下,在该文件目录下输入以下指令:java -jar svg2vector-cli-1.0.0.jar -d . -o output -h 20 -w 20 output指输出文件夹的名字,-h后的20指vector转换后的android:height="20dp...
使用Android自带的工具,解析xml文件内容,并显示在程序界面上
Android中使用xml文件定义颜色资源.pdf 学习资料 复习资料 教学资源
android使用xml编写动画以及android的布局动画,如何使用xml文件编写和调用动画
pull解析xml文件,和sax和dom一样 都可以脱离android单独使用,pull和sax的原理一样,不一样的地方是pull读取xml文件后调用方法返回的是数字, 读取到xml的声明返回数字0 START_DOCUMENT; 读取到xml的结束返回数字1 ...
个人从qq.apk中解压缩出来的图片资源,请大家不要下载,因为对大家无用,这仅是个人以csdn作为中转的。谢谢合作。
android的xml操作,pull解析和xml的生成
在android平台下使用PULL解析XML源码。
Java 平台支持通过许多不同的方式来使用 XML,并且大多数与 XML 相关的 Java API 在 Android 上得到了完全支持。举例来说,Java 的 Simple API for XML (SAX) 和 Document Object Model (DOM) 在 Android 上都是可用...