當前位置:編程學習大全網 - 源碼下載 - 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-plete(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,說明上傳成功。

  • 上一篇:去大理旅遊要多少錢?大理是個拍照的好地方。
  • 下一篇:今日頭條的文章推薦機制怎麽用
  • copyright 2024編程學習大全網