forked from lxm_tools/flutter-picgo
32 lines
1.2 KiB
Dart
32 lines
1.2 KiB
Dart
import 'dart:convert';
|
||
import 'package:crypto/crypto.dart';
|
||
|
||
class QiniuApi {
|
||
static const String BASE_URL = '';
|
||
|
||
/// 上传凭证算法
|
||
/// https://developer.qiniu.com/kodo/manual/1208/upload-token
|
||
/// https://pub.flutter-io.cn/packages/crypto
|
||
static String generateUpToken(
|
||
String accessKey, String secretKey, String putPolicy) {
|
||
//对 JSON 编码的上传策略进行URL 安全的 Base64 编码,得到待签名字符串:
|
||
var encodedPutPolicy = base64Encode(utf8.encode(putPolicy));
|
||
// 使用访问密钥(AK/SK)对上一步生成的待签名字符串计算HMAC-SHA1签名:
|
||
var hmacsha1 = Hmac(sha1, utf8.encode(secretKey));
|
||
var digest = hmacsha1.convert(utf8.encode(encodedPutPolicy));
|
||
// 对签名进行URL安全的Base64编码:
|
||
var encodeSign = base64Encode(digest.bytes);
|
||
return '$accessKey:$encodeSign:$encodedPutPolicy';
|
||
}
|
||
|
||
/// 生成putPolicy
|
||
/// https://developer.qiniu.com/kodo/manual/1206/put-policy
|
||
static String generatePutPolicy(String bucket, String key) {
|
||
Map<String, dynamic> map = {
|
||
'scope': '$bucket:$key',
|
||
'deadline': new DateTime.now().millisecondsSinceEpoch + 3600
|
||
};
|
||
return json.encode(map);
|
||
}
|
||
}
|