Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android開發之上傳圖片到七牛雲存儲服務器

android開發之上傳圖片到七牛雲存儲服務器

編輯:關於Android編程

相信很多開發者會把圖片存放到七牛上,我的web站點也是吧圖片存儲到七牛上,對於以圖片為主的站點,這樣可以節省很大帶寬。

將圖片上傳到七牛服務器的重點就是獲得上傳憑證uploadToken,直接把AccessKey和Secret放到客戶端太不安全,容易被反編譯。所以需要在服務器端根據AccessKey和Secret動態生成一個uploadToken,然後傳回到客戶端,客戶端通過這個uploadToken將圖片上傳到七牛服務器。

第一、在服務器端生成uploadToken

 

//將圖片上傳到七牛 start
$bucket='七牛空間名稱';
$expires = 3600;
$accessKey='去七牛查看';
$secretKey='去七牛查看';
$client = new QiniuClient($accessKey,$secretKey);   
$flags = array();
$scope = $bucket;
$deadline = time() + $expires;
$flags['scope'] = $scope;
$flags['deadline'] = $deadline;
$flags['returnBody'] = null;
echo $client->uploadToken($flags);

 

這裡注意一下bucket:七牛空間名稱和deadline:uploadToken失效時間,具體可查看一下官網上傳憑證介紹

uploadToken($flags)是自己封裝的用於生成上傳憑證的函數

 


public function uploadToken($flags)  {  if(!isset($flags['deadline']))  $flags['deadline'] = 3600 + time();  $encodedFlags = self::urlsafe_base64_encode(json_encode($flags));  $sign = hash_hmac('sha1', $encodedFlags, $this->secretKey, true);  $encodedSign = self::urlsafe_base64_encode($sign);      $token = $this->accessKey.':'.$encodedSign. ':' . $encodedFlags;       return $token;  } 
	public static function urlsafe_base64_encode($str){
	    $find = array("+","/");
	    $replace = array("-", "_");
	    return str_replace($find, $replace, base64_encode($str));
	}

 



 

第二、下載qiniu-android-sdk-7.0.0.jar和android-async-http-1.4.6並導入項目

第三、android上傳圖片

由於Android4.0 以後不允許在主線程進行網絡連接,所以需要新開個線程來獲取上傳憑證。

 

	/*
	 * 上傳圖片到七牛
	 */
	private void uploadImg(){
		new Thread(new Runnable(){
			@Override
			public void run() {
				//獲得七牛上傳憑證uploadToken
				String token=getUploadToken();
				//手機SD卡圖片存放路徑
				String imgPath="";
				try {
					imgPath=FileUtil.getBasePath()+ "/test.jpg";
				} catch (IOException e) {
					e.printStackTrace();
				}
				if(token!=null){
					String data = imgPath;
					//圖片名稱為當前日期+隨機數生成
					String key = getRandomFileName();
					UploadManager uploadManager = new UploadManager();
					uploadManager.put(data, key, token,
					new UpCompletionHandler() {
						@Override
						public void complete(String arg0, ResponseInfo info, JSONObject response) {
							// TODO Auto-generated method stub
							Log.i("qiniu", info.toString());
						}
					}, null);
				}
				else{
					Log.i("fail", "上傳失敗");
				}
			}
		}).start();
	}

FileUtil.getBasePath()使用來獲取SD卡基本路徑,getRandomFileName()生成一個隨機數來命名上傳圖片,具體方法我在這就不寫了。

 

獲得上傳憑證的方法也很簡單,直接使用httpget和服務器通信,獲得第一步中生成的數據即可。(注意10.0.2.2是模擬器提供的特殊IP,等同於在電腦端的環回測試IP127.0.0.1)

 

	/*
	 * 獲得七牛上傳憑證uploadtoken
	 */

	private String getUploadToken()
	{
	    HttpClient client = new DefaultHttpClient();
	    StringBuilder builder = new StringBuilder();
	 
	    HttpGet myget = new HttpGet("http://10.0.0.2/test/getUploadToken.php");
	    try {
	        HttpResponse response = client.execute(myget);
	        BufferedReader reader = new BufferedReader(new InputStreamReader(
	        response.getEntity().getContent()));
	        for (String s = reader.readLine(); s != null; s = reader.readLine()) {
	            builder.append(s);
	        }
	        return builder.toString();
	    } catch (Exception e) {
	        Log.i("url response", "false");
	        e.printStackTrace();
	        return null;
	    }
	}

通過LOG日志可以看到Qiniu--success,說明上傳成功。

 

\

 

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved