0
点赞
收藏
分享

微信扫一扫

关于android图片的传输,android图…

绪风 2023-04-30 阅读 95


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

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

1.获取android客服端图片



Java代码

关于android图片的传输,android图…_数据


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




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



Java代码

关于android图片的传输,android图…_数据

关于android图片的传输,android图…_java_03

关于android图片的传输,android图…_数据_04


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



2.服务器端的代码



Java代码

关于android图片的传输,android图…_数据

关于android图片的传输,android图…_java_06

关于android图片的传输,android图…_java_03

关于android图片的传输,android图…_数据_04


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




StreamUtil帮助类里面完整代码



Java代码

关于android图片的传输,android图…_数据

1. public class StreamUtil {

2. public static byte[] read(InputStream in) throws Exception {

3. ByteArrayOutputStream out = new ByteArrayOutputStream();
4. if (in != null) {

5. byte[] buffer = new byte[1024];
6. int length = 0;
7. while ((length = in.read(buffer)) != -1) {

8. out.write(buffer, 0, length);
9. }
10. out.close();
11. in.close();
12. return out.toByteArray();
13. }
14. return null;
15. }
16. public static boolean sendHttpClientPOSTRequest(String path, Map params, String encoding) throws Exception{

17. List param = new ArrayList();
18. if(params!=null && !params.isEmpty()){

19. for(Map.Entry entry : params.entrySet()){

20. param.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
21. }
22. }
23. UrlEncodedFormEntity entity = new UrlEncodedFormEntity(param, encoding);
24. HttpPost post = new HttpPost(path);
25. // HttpGet get = new HttpGet();
26. post.setEntity(entity);
27. DefaultHttpClient client = new DefaultHttpClient();
28. HttpResponse response = client.execute(post);
29. if(response.getStatusLine().getStatusCode() == 200){

30. // response.getEntity().getContent();//获取服务器返回的数据
31. return true;
32. }
33. return false;
34. }
35. }




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



Java代码

关于android图片的传输,android图…_数据

关于android图片的传输,android图…_java_03

关于android图片的传输,android图…_数据_04

1. /*//对文件的操作 注:此方法测试有问题
2. FileInputStream in = new FileInputStream(Environment.getExternalStorageDirectory() + "/images/musicmax.png");
3. byte buffer[] = StreamUtil.read(in);
4. byte[] encod = Base64.encode(buffer,Base64.DEFAULT);
5. StringBuffer sb = new StringBuffer("value=");
6. URL url = new URL(path);
7. HttpURLConnection conn = (HttpURLConnection) url.openConnection();
8. conn.setConnectTimeout(5 * 1000);
9. conn.setRequestMethod("POST");
10. conn.setDoOutput(true);//允许对外输出数据
11. conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
12. conn.setRequestProperty("Content-Length", (sb.toString().getBytes().length + encod.length) + "");
13. OutputStream outs = conn.getOutputStream();
14. outs.write(sb.toString().getBytes());
15. outs.write(encod);
16. outs.close();
17. Log.i(TAG,new String(encod));
18. if(conn.getResponseCode() == 200){

19. Log.i(TAG, "success :" + path + "----:decode:----" + new String(Base64.decode(encod, Base64.DEFAULT)));
20. //下面的代码是测试是否解码后能生成对应的图片没
21. // FileOutputStream fileout = new FileOutputStream(Environment.getExternalStorageDirectory() + "/images/musicmax1.png");
22. // fileout.write(Base64.decode(encod, Base64.DEFAULT));
23. // fileout.close();
24. }


举报

相关推荐

0 条评论