StyleAI厚积薄发: Android网络图片数据传输

        在StyleAI上厚积了这么长时间,憋了这么久,本来想憋个更大的,不过还是薄发一次的好。


三、直接使用别人的工程

文章:Android学习之客户端上传图片到服务器

下载地址:https://download.csdn.net/download/wlj142/7594879

可以运行



二、在Eclipse中使用XUtils3组件 

         文章:在Eclipse中导入XUtils3

把 jni\armeabi下面的 libwebpbackport.so文件 复制到 个人工程 jni\armeabi下面;

把 xutils-3.3.36.jar 文件,复制到 libs 下面;


参考原文,按照原文指示一步一步地操作,会运行成功。

建议使用3.3.36版本,3.5版本的JNI文件不存在,可能发生了重大变更

GitHub:https://github.com/wyouflf/xUtils3

下载地址:http://dl.bintray.com/wyouflf/maven/org/xutils/xutils/3.3.36/


一、安卓C/S图片数据传输APP端-将图片传输至服务器端存储     

1.整体思路:
客户端:
(1)将图片信息转化成byte数组;
(2)将图片信息进行base64加密;
服务端:
(1)将加密字符串进行解密
(2)解密之后的字符串还原成byte数组
(3)将byte数组写入到文件中
解密:

        byte[] imageByteArray=HmsUtil.decodeBase64(changeHeadPic.getPic());

HmsUtil中的代码:

    public static byte[] decodeBase64(String encodeStr) {
        return Base64.decode(encodeStr);
    }

写入到文件:

public static Boolean saveFile(byte[] fileByteArray, String path, String fileName) {
        BufferedOutputStream out = null;
        //标记文件保存是否成功
        Boolean flag = true;
        try {
            out = new BufferedOutputStream(new FileOutputStream(path));
            out.write(fileByteArray);
            out.flush();
        } catch (Exception e) {
            flag = false;
            logger.error("保存文件失败!", e);
        } finally {
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                }
            }
        }
        return flag;
    }


二、使用android-async-http框架传输base64加密图片

       android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架传输

组件:http://loopj.com/Android-async-http/

使用 http://loopj.com/android-async-http

下载地址:http://loopj.com/android-async-http/  建议直接下载jar文件

package com.example.irisdetectyiyi;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import android.content.Context;
import android.graphics.Bitmap;
import android.util.Base64;

import org.xutils.x;
import org.xutils.http.RequestParams;

import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;

public class dataG2Net {

	// 传输本地图片和时间戳到网络
	// 获取信息和时间戳到本地,同步显示
	public dataG2Net() {

	}

	public static void reg(final Context cont, Bitmap photodata, String regData) {
		try {
			ByteArrayOutputStream baos = new ByteArrayOutputStream();

			// 将bitmap一字节流输出 Bitmap.CompressFormat.PNG 压缩格式,100:压缩率,baos:字节流
			photodata.compress(Bitmap.CompressFormat.PNG, 100, baos);
			baos.close();
			byte[] buffer = baos.toByteArray();
			System.out.println("图片的大小:" + buffer.length);

			// 将图片的字节流数据加密成base64字符输出
			String photo = Base64.encodeToString(buffer, 0, buffer.length, Base64.DEFAULT);

			// photo=URLEncoder.encode(photo,"UTF-8");
			RequestParams params = new RequestParams();
			params.put("photo", photo);
			params.put("name", "woshishishi");// 传输的字符数据
			String url = "http://10.0.2.2:8080/IC_Server/servlet/RegisterServlet1";

			AsyncHttpClient client = new AsyncHttpClient();
			client.post(url, params, new AsyncHttpResponseHandler() {

				@Override
				public void onSuccess(int statusCode, String content) {
					Toast.makeText(cont, "头像上传成功!" + content, 0).show();
				}

				@Override
				public void onFailure(Throwable e, String data) {
					Toast.makeText(cont, "头像上传失败!", 0).show();
				}
			});

		} catch (Exception e) {
			e.printStackTrace();
		}
		//
	}

}

posted @ 2018-03-28 16:57  wishchin  阅读(225)  评论(0编辑  收藏  举报