net快速建站,音乐网站如何建立,店铺推广引流,网站建设怎么做网站flutter直接上传文件到阿里云需要获取凭证#xff0c;通过调用阿里云获取凭证的接口能拿到下面这些参数 
{StatusCode: 200,AccessKeyId: STS.NSsrKZes4cqm.....,AccessKeySecret: 7eGnLZaEFsRCGYJAnrtdE9n.....…flutter直接上传文件到阿里云需要获取凭证通过调用阿里云获取凭证的接口能拿到下面这些参数 
{StatusCode: 200,AccessKeyId: STS.NSsrKZes4cqm.....,AccessKeySecret: 7eGnLZaEFsRCGYJAnrtdE9n.....,Expiration: 2020-04-08T03:44:21Z,SecurityToken: CAISlQJ1q6Ft5B2y.....}获取凭证的接口一般是后台去对接阿里云前端调后台接口即可。STS.的这种AccessKeyId安全性高一些 1.获取OSSToken信息 
import dart:math;
import package:jade/https/HttpApplication.dart;
import package:jade/utils/alioss/AliOSSAccessTokenInfoBean.dart;
import package:intl/intl.dart;
import dart:typed_data;
import dart:convert;
import package:crypto/crypto.dart;
import package:uuid/uuid.dart;class OSSHelper{//从给定的字母中生成随机字符串String getRandom(int num) {String alphabet  qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM;String left  ;for (var i  0; i  num; i) {left  left  alphabet[Random().nextInt(alphabet.length)];}return left;}//这个时间要注意String getGMTDateString() {var date  DateTime.now();date  date.subtract(const Duration(hours: 8));return DateFormat(EEE, dd MMM yyyy HH:mm:ss GMT, en).format(date);}///使用md5加密String generateMD5(String data) {Uint8List content  new Utf8Encoder().convert(data);Digest digest  md5.convert(content);return digest.toString();}httpGetStsInfo({Function callback}){//根据后台给定的规则配置uuidvar uuid  Uuid();String uuidStr  uuid.v4().replaceAll(-, ); //去掉uuid中的‘-’获取到32位String nowDate  DateTime.now().toString().substring(0,19);//当前时间拼接uuid并加盐后面这串盐由后台给定String md5Str  nowDate  uuidStr  ikloniyq8923yvakn67q4in; //调用获取OSSToken信息的接口HttpApplication.getInstance().alOSSStsInfo(uuidStr, nowDate, generateMD5(md5Str),callBack: (result){if(result ! null){AliOssAccessTokenInfoBean _aliOSSAccessTokenInfoBean  AliOssAccessTokenInfoBean.fromJson(result);if(_aliOSSAccessTokenInfoBean ! null){callback(_aliOSSAccessTokenInfoBean);}}},errorCallBack: (error){});}
}token信息实体类 
class AliOssAccessTokenInfoBean {AliOssAccessTokenInfoBean({this.securityToken, this.accessKeySecret, this.accessKeyId, this.expiration, this.statusCode,});AliOssAccessTokenInfoBean.fromJson(dynamic json) {securityToken  json[SecurityToken];accessKeySecret  json[AccessKeySecret];accessKeyId  json[AccessKeyId];expiration  json[Expiration];statusCode  json[StatusCode];}String securityToken;String accessKeySecret;String accessKeyId;String expiration;int statusCode;MapString, dynamic toJson() {final map  String, dynamic{};map[SecurityToken]  securityToken;map[AccessKeySecret]  accessKeySecret;map[AccessKeyId]  accessKeyId;map[Expiration]  expiration;map[StatusCode]  statusCode;return map;}}上传方法 
import dart:convert;
import dart:io;
import dart:math;
import dart:typed_data;
import package:crypto/crypto.dart;
import package:dio/dio.dart;class UploadOss {//请求下来的AccessKeyIdstatic String ossAccessKeyId;//请求下来的AccessKeySecretstatic String ossAccessKeySecret;// oss设置的bucket列表中用来存放图片视频的文件夹的名字static String bucket  zmkx;// 发送请求用的url,根据你自己设置的是哪个城市的static String url  https://$bucket.oss-cn-hangzhou.aliyuncs.com;static String host  $bucket.oss-cn-hangzhou.aliyuncs.com; //写入你对应的地址//请求下来的AccessKeySecretstatic String ossSecurityToken;// 过期时间  请求下来的expiration static String expiration;/** params file 要上传的文件对象* params rootDir 阿里云oss设置的根目录文件夹名字* param fileType 文件类型例如jpg,mp4等* param callback 回调函数我这里用于传cancelToken方便后期关闭请求* param onSendProgress 上传的进度事件* */static FutureString upload({ Uint8List file , String rootDir  oss/folder, String fileName,Function callback, Function onSendProgress}) async {String policyText  {expiration: $expiration,conditions: [{bucket: $bucket },[content-length-range, 0, 1048576000]]};// 获取签名String signature  getSignature(policyText);BaseOptions options  new BaseOptions();options.responseType  ResponseType.plain;//创建dio对象Dio dio  new Dio(options);/*dio.options.responseType  ResponseType.plain;dio.interceptors.add(InterceptorsWrapper(onRequest: (options, handler) {options.headers[Authorization]  OSS   ossAccessKeyId  :  signature;options.headers[Host]  host;options.headers[x-oss-security-token]  ossSecurityToken;options.contentType  multipart/form-data;//options.headers[date]  date;handler.next(options);}));*/// 生成oss的路径和文件名String pathName  $rootDir/test_hyf.$fileName;// 请求参数的form对象FormData data  new FormData.fromMap({// Filename: fileName,key: pathName,policy: getSplicyBase64(policyText),OSSAccessKeyId: ossAccessKeyId,success_action_status: 200, //OSSToken信息里的StatusCode是200我设置成200阿里云默认返回204signature: signature,x-oss-security-token: ossSecurityToken,contentType: multipart/form-data,file: MultipartFile.fromBytes(file),});Response response;print(url  $url);try {// 发送请求response  await dio.post(url, data: data);// 成功后返回文件访问路径if(response.statusCode  200){ //获取OSSToken信息接口的StatusCode返多少就判断等于多少return $url/$pathName;}} catch(e) {throw(e.message);}}/** 生成固定长度的随机字符串* */static 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;}/** 根据图片本地路径获取图片名称* */static String getImageNameByPath(String filePath) {// ignore: null_aware_before_operatorreturn filePath?.substring(filePath?.lastIndexOf(/)1,filePath?.length);}/*获取文件类型* */static String getFileType(String path) {print(path);ListString array  path.split(.);return array[array.length -1];}/// 获取日期static String getDate() {DateTime now  DateTime.now();return ${now.year}${now.month}${now.day};}// 获取plice的base64static getSplicyBase64(String policyText) {//进行utf8编码Listint policyText_utf8  utf8.encode(policyText);//进行base64编码String policy_base64  base64.encode(policyText_utf8);return policy_base64;}/// 获取签名static String getSignature(String policyText) {//进行utf8编码Listint policyText_utf8  utf8.encode(policyText);//进行base64编码String policy_base64  base64.encode(policyText_utf8);//再次进行utf8编码Listint policy  utf8.encode(policy_base64);//进行utf8 编码Listint key  utf8.encode(ossAccessKeySecret);//通过hmac,使用sha1进行加密Listint signature_pre  Hmac(sha1, key).convert(policy).bytes;//最后一步将上述所得进行base64 编码String signature  base64.encode(signature_pre);return signature;}
}调用方式 
import dart:typed_data;
import package:jade/utils/alioss/AliOSSAccessTokenInfoBean.dart;
import package:jade/utils/alioss/OSSHelper.dart;
import package:jade/utils/alioss/UploadOss.dart;
import package:flutter/material.dart;
import package:multi_image_picker/multi_image_picker.dart;class AliUpLoadTest extends StatefulWidget{overrideStateStatefulWidget createState() {// TODO: implement createStatereturn _AliUpLoadTest();}
}class _AliUpLoadTest extends StateAliUpLoadTest{overrideWidget build(BuildContext context) {// TODO: implement buildreturn GestureDetector(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: [Container(width: 100,height: 60,color: Colors.red,)],),onTap: (){//最好是在调完接口后对对应参数进行赋值接着使用上传方法本人写死请求下来的token信息进行测试一直报403应该是token信息的持有时间很短OSSHelper().httpGetStsInfo(callback: (aliOSSAccessTokenInfoBean){AliOssAccessTokenInfoBean _aliOSSAccessTokenInfoBean  aliOSSAccessTokenInfoBean;setState(() {UploadOss.ossAccessKeyId  _aliOSSAccessTokenInfoBean.accessKeyId;UploadOss.ossAccessKeySecret  _aliOSSAccessTokenInfoBean.accessKeySecret;UploadOss.expiration  _aliOSSAccessTokenInfoBean.expiration;UploadOss.ossSecurityToken  _aliOSSAccessTokenInfoBean.securityToken;});openPhotoSelect(1);});},);}openPhotoSelect(int maxImages) async {try {ListAsset images  await MultiImagePicker.pickImages(maxImages: 1,enableCamera: true,cupertinoOptions: CupertinoOptions(takePhotoIcon: chat),materialOptions: MaterialOptions(actionBarTitle: 图片选择,allViewTitle: 所有图片,useDetailsView: true,selectCircleStrokeColor: #4dc8b6,selectionLimitReachedText: 最多选择$maxImages张图片,),);Asset asset  images[0];uploadFile(asset);} on Exception catch (e) {print(e);}}FutureString uploadFile(Asset asset ) async {ByteData byteData  await asset.getByteData();Listint imageData  byteData.buffer.asUint8List();final String url  await UploadOss.upload(file: imageData,fileName:asset.name);print(OSS返回的文件地址  $url);return url;}
}以上直接是上传图片到阿里云成功调通了的demo,并没由做多图的封装。UploadOss是在网上找的工具类百分之九十九搜出来都是这个。 还有找到另外一个工具类不过并没有用测试过代码 
import dart:collection;
import dart:convert;
import dart:math;
import dart:typed_data;import package:crypto/crypto.dart;
import package:dio/dio.dart;
import package:intl/intl.dart;class UploadUtil {String host  $bucket.oss-cn-hangzhou.aliyuncs.com; //写入你对应的地址// 发送请求的url,根据你自己设置的是哪个城市的static String url  https://$bucket.oss-cn-hangzhou.aliyuncs.com;static String ossAccessKeyId  STS.NV864oDQJQELywUH427zm7V46;static String ossAccessKeySecret  2KAmY77P6z9C3cEMFrdESxSXdzUSpZucW6PEo3uxpewy;static String ossSecurityToken  CAISoQJ1q6Ft5B2yfSjIr5WNfY7bqY5r5oene1HkrDRnO/VB2JOf1Dz2IH1JfnVtCO4et/w3mWhS5/cZlrhIWoR4XkHeStBr1ZlM6gKmZdIFGEcHJOVW5qeEE2/VjThvqaLEeCbIfrZfvCyERm8gZ43br9cxi7QlWhKufnoJV7b9MRLG7aCD1dH4VuOxdFos0XPmerZpTLCBPxhXfKB0dFoxd1jXgFiZ6y2cqB8BHT/iqYvYevNb2OYP2LZsuboV6UMfy2/dtMaTG1CJd8V8I1t8v0vEfqG2W74/AWQQMvEzeCYeOrI0zdj0eT7MhBqtJoML7kfBFoeHJnz1sU0QYLsJDnWBHNn4mJacQrL4bcxYb7/PG/WycGUJm9lZMuVjuJxGoABb28iVg9ghcjTcfGgi3kkzknftUIsfBQieSUlngPouzWRJQYpvb74JlVLxbVtnxrW8J/LBqlSVjRlW1WPxgqwX4K5KwJ8zwFwM61JnNJsm4eCMsG2lgzZw2qAIWh2cfw1wrGdz20sWBaDxy9ne/AtHiEEc2H6E23TQIcfoNtU;// oss设置的bucket的名字static String bucket  zmkx;// 过期时间static String expiration  2023-08-22T03:45:25Z;FutureString ossUploadImage(Uint8List imageData,{ String fileType, String directory  community}) async {//命名String timeStr  DateFormat(yyyyMMdd, en).format(DateTime.now());String pathName  img/$directory/app$timeStr${getRandom(12)}.$fileType;String date  getGMTDateString();String contentType  image/$fileType;//签名相关//请求头SplayTreeMapString, String treeMap  SplayTreeMap();treeMap[Content-Type.toLowerCase()]  contentType.trim();treeMap[Content-MD5.toLowerCase()]  ;treeMap[Date.toLowerCase()]  date.trim();treeMap[x-oss-security-token.toLowerCase()]  ossSecurityToken.trim();String headString  PUT\n;treeMap.forEach((key, value) {if (key.startsWith(x-oss-)) {headString  key;headString  :;headString  value;} else {headString  value;}headString  \n;});String contentString  /$bucket/$pathName;String contentToSign  headString  contentString;Listint key  utf8.encode(ossAccessKeySecret);Listint data  utf8.encode(contentToSign);var signaturePre  Hmac(sha1, key).convert(data).bytes;//最后一步将上述所得进行base64 编码String signature  base64.encode(signaturePre);String signatureA  OSS   ossAccessKeyId  :  signature;Dio dio  Dio();dio.options.responseType  ResponseType.plain;dio.interceptors.add(InterceptorsWrapper(onRequest: (options, handler) {options.headers[Authorization]  signatureA;options.headers[Host]  host;options.headers[x-oss-security-token]  ossSecurityToken;options.contentType  contentType;options.headers[date]  date;handler.next(options);}));try {// 发送请求var resultUrl  url /* /$pathName*/;//必须转成这个类型才可以StreamListint stream  Stream.value(imageData);var rep  await dio.put(resultUrl, data: stream);// 成功后返回文件访问路径return $url/$pathName;} catch (e) {return 错误${e.toString()};}}String getRandom(int num) {String alphabet  qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM;String left  ;for (var i  0; i  num; i) {left  left  alphabet[Random().nextInt(alphabet.length)];}return left;}//这个时间要注意String getGMTDateString() {var date  DateTime.now();date  date.subtract(const Duration(hours: 8));return DateFormat(EEE, dd MMM yyyy HH:mm:ss GMT, en).format(date);}/*获取文件类型* */static String getFileType(String path) {print(path);ListString array  path.split(.);return array[array.length -1];}}
 文章转载自: http://www.morning.rdng.cn.gov.cn.rdng.cn http://www.morning.qbwtb.cn.gov.cn.qbwtb.cn http://www.morning.zkqwk.cn.gov.cn.zkqwk.cn http://www.morning.dyzbt.cn.gov.cn.dyzbt.cn http://www.morning.sjftk.cn.gov.cn.sjftk.cn http://www.morning.hwhnx.cn.gov.cn.hwhnx.cn http://www.morning.fqssx.cn.gov.cn.fqssx.cn http://www.morning.dtrzw.cn.gov.cn.dtrzw.cn http://www.morning.yrhd.cn.gov.cn.yrhd.cn http://www.morning.mggwr.cn.gov.cn.mggwr.cn http://www.morning.xwrhk.cn.gov.cn.xwrhk.cn http://www.morning.rxydr.cn.gov.cn.rxydr.cn http://www.morning.qypjk.cn.gov.cn.qypjk.cn http://www.morning.qqhersx.com.gov.cn.qqhersx.com http://www.morning.rfmzs.cn.gov.cn.rfmzs.cn http://www.morning.mmxnb.cn.gov.cn.mmxnb.cn http://www.morning.qqpg.cn.gov.cn.qqpg.cn http://www.morning.zdhnm.cn.gov.cn.zdhnm.cn http://www.morning.fmqw.cn.gov.cn.fmqw.cn http://www.morning.jwgnn.cn.gov.cn.jwgnn.cn http://www.morning.kggxj.cn.gov.cn.kggxj.cn http://www.morning.tpchy.cn.gov.cn.tpchy.cn http://www.morning.dcdhj.cn.gov.cn.dcdhj.cn http://www.morning.xzjsb.cn.gov.cn.xzjsb.cn http://www.morning.zlnf.cn.gov.cn.zlnf.cn http://www.morning.kyjpg.cn.gov.cn.kyjpg.cn http://www.morning.ljhnn.cn.gov.cn.ljhnn.cn http://www.morning.mlntx.cn.gov.cn.mlntx.cn http://www.morning.jytrb.cn.gov.cn.jytrb.cn http://www.morning.nkjkh.cn.gov.cn.nkjkh.cn http://www.morning.xyhql.cn.gov.cn.xyhql.cn http://www.morning.csnmd.cn.gov.cn.csnmd.cn http://www.morning.drywd.cn.gov.cn.drywd.cn http://www.morning.gqksd.cn.gov.cn.gqksd.cn http://www.morning.dskmq.cn.gov.cn.dskmq.cn http://www.morning.kfhm.cn.gov.cn.kfhm.cn http://www.morning.pclgj.cn.gov.cn.pclgj.cn http://www.morning.yydeq.cn.gov.cn.yydeq.cn http://www.morning.bpmdg.cn.gov.cn.bpmdg.cn http://www.morning.fnywn.cn.gov.cn.fnywn.cn http://www.morning.yhpq.cn.gov.cn.yhpq.cn http://www.morning.sqmbb.cn.gov.cn.sqmbb.cn http://www.morning.qtyfb.cn.gov.cn.qtyfb.cn http://www.morning.tgczj.cn.gov.cn.tgczj.cn http://www.morning.rlpmy.cn.gov.cn.rlpmy.cn http://www.morning.btcgq.cn.gov.cn.btcgq.cn http://www.morning.lxjcr.cn.gov.cn.lxjcr.cn http://www.morning.yckwt.cn.gov.cn.yckwt.cn http://www.morning.wcjgg.cn.gov.cn.wcjgg.cn http://www.morning.lmjkn.cn.gov.cn.lmjkn.cn http://www.morning.lcplz.cn.gov.cn.lcplz.cn http://www.morning.qqfcf.cn.gov.cn.qqfcf.cn http://www.morning.fpczq.cn.gov.cn.fpczq.cn http://www.morning.zfcfk.cn.gov.cn.zfcfk.cn http://www.morning.dbylp.cn.gov.cn.dbylp.cn http://www.morning.ztqj.cn.gov.cn.ztqj.cn http://www.morning.yzfrh.cn.gov.cn.yzfrh.cn http://www.morning.xfdkh.cn.gov.cn.xfdkh.cn http://www.morning.qcmhs.cn.gov.cn.qcmhs.cn http://www.morning.qwpyf.cn.gov.cn.qwpyf.cn http://www.morning.xkzmz.cn.gov.cn.xkzmz.cn http://www.morning.hpspr.com.gov.cn.hpspr.com http://www.morning.qfzjn.cn.gov.cn.qfzjn.cn http://www.morning.snnkt.cn.gov.cn.snnkt.cn http://www.morning.ztcxx.com.gov.cn.ztcxx.com http://www.morning.qhkx.cn.gov.cn.qhkx.cn http://www.morning.dnqliv.cn.gov.cn.dnqliv.cn http://www.morning.wsnjn.cn.gov.cn.wsnjn.cn http://www.morning.cpwmj.cn.gov.cn.cpwmj.cn http://www.morning.qrlsy.cn.gov.cn.qrlsy.cn http://www.morning.kpxnz.cn.gov.cn.kpxnz.cn http://www.morning.bxhch.cn.gov.cn.bxhch.cn http://www.morning.cxnyg.cn.gov.cn.cxnyg.cn http://www.morning.mgskc.cn.gov.cn.mgskc.cn http://www.morning.fdrwk.cn.gov.cn.fdrwk.cn http://www.morning.kjsft.cn.gov.cn.kjsft.cn http://www.morning.rhnn.cn.gov.cn.rhnn.cn http://www.morning.tgfjm.cn.gov.cn.tgfjm.cn http://www.morning.tbjb.cn.gov.cn.tbjb.cn http://www.morning.c7495.cn.gov.cn.c7495.cn