Flutter 는 OSS 에 사진 을 올 립 니 다.
4963 단어 Flutter
준비 작업:
1. OSS 증빙 주소 (your oss sts server) 를 가 져 오고 get 에 static String ossServerUrl = '을 직접 가 져 오 라 고 알 립 니 다.http://.../sts-server/sts.php';
2. 업 로드 된 저장 소 주소 (통 이름): static String ossEndPointCdn = ';
// ossServerUrl get
{
"StatusCode": 200,
"AccessKeyId": "STS.NSsrKZes4cqm.....",
"AccessKeySecret": "7eGnLZaEFsRCGYJAnrtdE9n.....",
"Expiration": "2020-04-08T03:44:21Z",
"SecurityToken": "CAISlQJ1q6Ft5B2y....."
}
// : AccessKeyId、AccessKeySecret、SecurityToken;
FormData formdata = new FormData.from({
// ,
'Filename': OssUtil.instance.getImageName(filePath),
//" ( oss )/" + fileName
'key': uploadName,//
'policy': OssUtil.policy,
//Bucket AccessKeyId。
'OSSAccessKeyId': data['AccessKeyId'],
// 200, , 204
'success_action_status': '200',
'signature': OssUtil.instance.getSignature(data['AccessKeySecret']),
// , security-token
'x-oss-security-token': data['SecurityToken'],
'file': new UploadFileInfo(
file, OssUtil.instance.getImageNameByPath(filePath))
//
});
// (formdata) ;
Dio dio=Dio();
dio.options.responseType=ResponseType.plain;
Response response=awaitdio.post(,data:formData);
......
tips: 업로드 성공 후 이미지 주소 imageUrl = ossEndPointCdn + '/' + uploadName;
도구 클래스
import 'dart:convert';
import 'package:crypto/crypto.dart';
import 'dart:math';
class OssUtil {
//
static String _policyText =
'{"expiration": "2069-05-22T03:15:00.000Z","conditions": [["content-length-range", 0, 1048576000]]}';//UTC +8=
// utf8
// ignore: non_constant_identifier_names
static List _policyText_utf8 = utf8.encode(_policyText);
// base64
static String policy= base64.encode(_policyText_utf8);
// utf8
// ignore: non_constant_identifier_names
static List _policy_utf8 = utf8.encode(policy);
//
factory OssUtil() => _getInstance();
static OssUtil get instance => _getInstance();
static OssUtil _instance;
OssUtil._internal();
static OssUtil _getInstance() {
if (_instance == null) {
_instance = new OssUtil._internal();
}
return _instance;
}
/*
* signature
*/
String getSignature(String _accessKeySecret){
// utf8
// ignore: non_constant_identifier_names
List AccessKeySecretUtf8 = utf8.encode(_accessKeySecret);
// hmac, sha1
List signaturePre = new Hmac(sha1, AccessKeySecretUtf8).convert(_policy_utf8).bytes;
// , base64
String signature = base64.encode(signaturePre);
return signature;
}
// ignore: slash_for_doc_comments
/**
* , :photo/20171027175940_oCiobK
* uploadPath(Oss )
* @param uploadPath :/photo
* @return photo/20171027175940_oCiobK
*/
String getImageUploadName(String uploadPath,String filePath) {
String imageMame = "";
var timestamp = new DateTime.now().millisecondsSinceEpoch;
imageMame =timestamp.toString()+"_"+getRandom(6);
if(uploadPath!=null&&uploadPath.isNotEmpty){
imageMame=uploadPath+"/"+imageMame;
}
String imageType=filePath?.substring(filePath?.lastIndexOf("."),filePath?.length);
return imageMame+imageType;
}
String getImageName(String filePath) {
String imageMame = "";
var timestamp = new DateTime.now().millisecondsSinceEpoch;
imageMame =timestamp.toString()+"_"+getRandom(6);
String imageType=filePath?.substring(filePath?.lastIndexOf("."),filePath?.length);
return imageMame+imageType;
}
/*
*
* */
String getRandom(int num) {
String alphabet = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM';
String left = '';
for (var i = 0; i < num; i++) {
// right = right + (min + (Random().nextInt(max - min))).toString();
left = left + alphabet[Random().nextInt(alphabet.length)];
}
return left;
}
/*
*
* */
String getImageNameByPath(String filePath) {
// ignore: null_aware_before_operator
return filePath?.substring(filePath?.lastIndexOf("/")+1,filePath?.length);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Flutter】DateTime 전월의 일수를 취득한다달의 일수를 취득할 필요가 있어, 의외로 수요 있을까라고 생각했으므로 비망록 정도에 남겨 둡니다. DateTime 날짜에 0을 입력하면 전월 DateTime이 됩니다. 2021년 3월 0일 = 2021년 2월 28일...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.