• <ul id="cgeq2"></ul>
  • 歡迎您光臨深圳塔燈網絡科技有限公司!
    電話圖標 余先生:13699882642

    網站百科

    為您解碼網站建設的點點滴滴

    flutter使用騰訊云COS對象服務

    發表日期:2019-01 文章編輯:小燈 瀏覽次數:3491

    官方文檔:請求簽名, Get Object

    轉載請注明出處: https://www.jianshu.com/p/49fe86909d18

    Overview

    本文使用dart按照騰訊COS文檔生成簽名,并使用簽名下載COS文件對象到本地(使用flutter_download包)

    載入crypto以及flutter_downloader包

    pubspec.yaml文件中加入依賴(flutter_downloader文檔,crypto文檔)

    Android: flutter_downloader 需要配置權限,請參考其文檔。

    dependencies: flutter: sdk: flutter ........ crypto: ^2.0.6 flutter_downloader: ^1.1.3 

    實現cos簽名以及下載文件

    import 'dart:convert';import 'package:crypto/crypto.dart'; import 'package:flutter_downloader/flutter_downloader.dart';class TencentCos { static bool debug = true; /// auth signature expired time in seconds static final int signExpireTimeInSeconds = '10';static final String secretId = 'tencentSerertId'; static final String secretKey = 'tencentSecretKey'; static final String bucketHost = 'yourBucketHost'; // xxx-xxxxxx.cos.ap-chengdu.myqcloud.comstatic TencentCos _cos;TencentCos._();static TencentCos get() { if (_cos == null) { _cos = TencentCos._(); }return _cos; } /// download $fileName and save to $saveDir(absolute path) Future<String> downloadFile(String fileName, String saveDir) async { var url = '/$fileName'; final taskId = await FlutterDownloader.enqueue( headers: buildHeaders(url), url: 'https://$bucketHost$url', savedDir: saveDir, fileName: fileName, showNotification: false, // show download progress in status bar (for Android) openFileFromNotification: false, // click on notification to open downloaded file (for Android) ); return taskId; }Map<String, String> buildHeaders(String url) { Map<String, String> headers = Map(); headers['HOST'] = bucketHost; headers['Authorization'] = _auth('get', url, headers: headers); if(debug) { print(headers); } return headers; }String _auth(String httpMethod, String httpUrl, {Map<String, String> headers, Map<String, String> params}) { headers = headers ?? Map(); params = params ?? Map();int currentTimestamp = DateTime.now().millisecondsSinceEpoch ~/ 1000; var keyTime = '$currentTimestamp;${currentTimestamp + signExpireTimeInSeconds}'; headers = headers.map((key, value) => MapEntry(key.toLowerCase(), value)); params = params.map((key, value) => MapEntry(key.toLowerCase(), value)); List<String> headerKeys = headers.keys.toList(); headerKeys.sort(); var headerList = headerKeys.join(';'); var httpHeaders = headerKeys .map((item) => '$item=${Uri.encodeFull(headers[item])}') .join('&');List<String> paramKeys = params.keys.toList(); paramKeys.sort(); var urlParamList = paramKeys.join(';'); var httpParameters = paramKeys .map((item) => '$item=${Uri.encodeFull(params[item])}') .join('&');var signKey = new Hmac(sha1, utf8.encode(secretKey)) .convert(utf8.encode(keyTime)); String httpString = '${httpMethod.toLowerCase()}\n$httpUrl\n$httpParameters\n$httpHeaders\n'; var httpStringData = sha1.convert(utf8.encode(httpString)); String stringToSign = 'sha1\n$keyTime\n$httpStringData\n'; var signature = new Hmac(sha1, utf8.encode(signKey.toString())).convert(utf8.encode(stringToSign));String auth = 'q-sign-algorithm=sha1&q-ak=$secretId&q-sign-time=$keyTime&q-key-time=$keyTime&q-header-list=$headerList&q-url-param-list=$urlParamList&q-signature=$signature'; return auth; } } 

    使用示例

    static final TencentCos _cos = TencentCos.get(); Future<String> _findLocalPath() async { final directory = widget.platform == TargetPlatform.android ? await getExternalStorageDirectory() : await getApplicationDocumentsDirectory(); return directory.path; }Future _requestDownload() async { ///$yourLocalSaveDir is relative pathvar _localPath = (await _findLocalPath()) + '$yourLocalSaveDir';var taskId = await _cos.downloadFile('$yourFileNameInCos', _localPath); } 

    更多

    可根據自己需求,使用buildHeaders生成帶簽名的請求頭,進行https請求。


    本頁內容由塔燈網絡科技有限公司通過網絡收集編輯所得,所有資料僅供用戶學習參考,本站不擁有所有權,如您認為本網頁中由涉嫌抄襲的內容,請及時與我們聯系,并提供相關證據,工作人員會在5工作日內聯系您,一經查實,本站立刻刪除侵權內容。本文鏈接:http://www.juherenli.com/17553.html
    相關APP開發
     八年  行業經驗

    多一份參考,總有益處

    聯系深圳網站公司塔燈網絡,免費獲得網站建設方案及報價

    咨詢相關問題或預約面談,可以通過以下方式與我們聯系

    業務熱線:余經理:13699882642

    Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.    

    久久久99精品免费观看| 国产精品一区在线播放| 国产精品二区高清在线| 人妻精品久久无码专区精东影业| 国产农村妇女精品一二区| 国产精品夜色一区二区三区| 国产精品三级国产电影| 午夜成人精品福利网站在线观看| 国产午夜亚洲精品| 久久亚洲精精品中文字幕| 国产亚洲精品久久久久秋霞| 国产精品免费综合一区视频| 亚洲精品自偷自拍无码| 91久久亚洲国产成人精品性色| 91精品国产高清久久久久久io| 午夜精品久久久久久久99| 亚洲精品色播一区二区| 1313午夜精品久久午夜片| 亚洲AV永久无码精品成人| 99久久精品费精品国产一区二区| 大伊香蕉精品视频在线导航| 日韩精品福利视频一区二区三区| 四虎必出精品亚洲高清| 78成人精品电影在线播放| 久久九九久精品国产日韩经典| 在线观看国产精品日韩av| 精品视频久久久久| chinese精品男同志浪小辉| 国产精品亚洲精品日韩电影| 无码人妻精品一区二区三区9厂 | 思思久久99热只有频精品66| 夜夜爽一区二区三区精品| 国产精品久久久久9999赢消| 青草久久精品亚洲综合专区| 伊人久久精品无码麻豆一区| 国产精品入口麻豆免费观看 | 亚洲精品一卡2卡3卡四卡乱码| 国产精品青草久久久久婷婷| 久久精品国产免费观看三人同眠| 91精品国产91热久久久久福利| 人妻精品久久久久中文字幕69|