StyleAI厚積薄發: Android網絡圖片數據傳輸

        在StyleAI上厚積了這麼長時間,憋了這麼久,原本想憋個更大的,不過仍是薄發一次的好。java


3、直接使用別人的工程
android

文章:Android學習之客戶端上傳圖片到服務器
git

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

能夠運行
web



2、在Eclipse中使用XUtils3組件 
數組

         文章:在Eclipse中導入XUtils3
服務器

把 jni\armeabi下面的 libwebpbackport.so文件 複製到 我的工程 jni\armeabi下面;網絡

把 xutils-3.3.36.jar 文件,複製到 libs 下面;框架


參考原文,按照原文指示一步一步地操做,會運行成功。async

建議使用3.3.36版本,3.5版本的JNI文件不存在,可能發生了重大變動

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

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


1、安卓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;
    }


2、使用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();
		}
		//
	}

}
相關文章
相關標籤/搜索