当前位置: 首页 > news >正文

pc端微信端网站建设漂亮html个人简历代码

pc端微信端网站建设,漂亮html个人简历代码,银川网站建设一条龙服务,套别人代码做网站前言 在移动开发中#xff0c;我们常常会遇到需要在App中处理文件上传和下载的需求。Minio是一个开源的对象存储服务#xff0c;它兼容Amazon S3云存储服务接口#xff0c;可以用于存储大规模非结构化的数据。 开始之前 在pubspec.yaml文件中添加minio_new库的依赖#xf…前言 在移动开发中我们常常会遇到需要在App中处理文件上传和下载的需求。Minio是一个开源的对象存储服务它兼容Amazon S3云存储服务接口可以用于存储大规模非结构化的数据。 开始之前 在pubspec.yaml文件中添加minio_new库的依赖 dependencies:minio_new: ^1.0.2运行flutter pub get命令来获取依赖。可去pub上看 minio_new 最新版本。 初始化Minio客户端 需要先创建一个Minio客户端的实例。这个实例需要配置Minio服务器的连接信息包括服务器的URL、端口号、访问密钥和密钥等。 var minio Minio(endPoint: your-minio-server.com,port: 9000,useSSL: false,accessKey: your-access-key,secretKey: your-secret-key, );参数介绍 useSSL指定是否使用 SSL 连接。如果设置为 true则使用 HTTPS 协议进行连接如果设置为 false则使用 HTTP 协议。 endPoint指定 MinIO 服务器的终端节点Endpoint。这是 MinIO 服务器的主机名或 IP 地址。 port指定连接 MinIO 服务器的端口号。 accessKey指定用于身份验证的 MinIO 服务器的访问密钥。这是访问 MinIO 存储桶和对象所需的身份验证凭据之一就是账号。 secretKey指定用于身份验证的 MinIO 服务器的秘密密钥。与访问密钥一同用于身份验证就是密码。 创建桶(Bucket) 在Minio中桶Bucket是一种用于组织和存储对象的容器。类似于文件系统中的文件夹桶在Minio中用于对对象进行逻辑分组和管理。每个桶都具有唯一的名称并且可以在Minio服务器上创建多个桶。 桶的命名规则只能包含小写字母、数字和连字符-并且长度必须在3到63个字符之间。桶的名称在Minio服务器上必须是唯一的。 Futurevoid createBucket(String bucketName) {minio.makeBucket(bucketName);//设置桶的公用权限这样外界才能通过链接访问return minio.setBucketPolicy(bucketName, {Version: 2012-10-17,Statement: [{Sid: PublicRead,//一个可选参数表示这个策略的 ID可以随意填写。Effect: Allow,//表示策略的效果如果希望所有人都可以读取那么这里就填写 Allow。Principal: *,//表示策略的主体如果希望所有人都可以读取那么这里就填写 *。Action: [s3:GetObject],//一个数组表示允许的操作如果希望所有人都可以读取那么就填写 [s3:GetObject]。Resource: [arn:aws:s3:::$bucketName/*]//一个数组表示策略的资源如果希望所有人都可以读取桶中的所有对象那么就填写 [arn:aws:s3:::your_bucket/*]。}]});}因为无论是上传还是下载文件都是基于桶进行操作的所以初始化之后在上传文件之前需要先创建桶可以通过minio.bucketExists事先来判断桶是否存在。 如果不设置桶的权限的话也就是不调用上面minio.setBucketPolicy方法默认创建的桶是私有的外界不能通过链接访问相关文件出了调用minio.setBucketPolicy设置权限外也可以在Minio后台设置桶的权限如下图 上传文件 ///上传文件FutureString uploadFile(String filename, String filePath) async {minio.fPutObject(bucketName, filename, filePath);//返回上传文件的完整访问路径return getUrl(filename);}bucketName要上传到哪个桶就写哪个桶名。 filename: 文件名如a.png。 filePath: 要上传文件的路径。 下载文件同理。 完整代码 minio.dart import dart:async; import dart:io;import package:ecology/utils/log_util.dart; import package:ecology/utils/toast.dart; import package:minio_new/io.dart; import package:minio_new/minio.dart; import package:minio_new/models.dart; import package:path/path.dart show dirname; import package:path_provider/path_provider.dart;// ignore: unused_import import package:rxdart/rxdart.dart;class Prefix {bool isPrefix;String key;String prefix; //使用前缀可以帮助你更好地组织和管理对象避免冲突和重复并方便批量操作,不使用传Prefix({required this.key, required this.prefix, required this.isPrefix}); }var _minio;FutureMinio _resetMinio() async {//固定配置-换成你实际的bool useSSl false;String endPoint red.xxx.com;int port 9000;String accessKey xxx;String secretKey xxx;try {_minio Minio(useSSL: useSSl,endPoint: endPoint,port: port,accessKey: accessKey,secretKey: secretKey,region: cn-north-1,);} catch (err) {XToast.show(err.toString());return Future.error(err);}return _minio; }class MinioController {late Minio minio;String bucketName;String prefix;static resetMinio() async {await _resetMinio();}/// maximum object size (5TB)final maxObjectSize 5 * 1024 * 1024 * 1024 * 1024;///传入唯一桶名自动初始化桶MinioController({required this.bucketName, this.prefix }) {if (_minio is Minio) {minio _minio;//初始化桶-由已有用户切换为新用户的情况下buckerExists(bucketName).then((exists) {if(!exists) {createBucket(bucketName);}});} else {_resetMinio().then((_) {minio _;//初始化桶buckerExists(bucketName).then((exists) {if(!exists) {createBucket(bucketName);}});});}}///用于列出存储桶中未完成的分块上传任务。这个函数允许你获取所有处于未完成状态的分块上传任务的信息以便你可以对其进行管理或继续上传。FutureListIncompleteUpload listIncompleteUploads({String? bucketName}) async {final list minio.listIncompleteUploads(bucketName ?? this.bucketName, ).toList();return list;}///获取桶对象///用于获取指定桶中的对象列表并返回一个包含前缀列表和对象列表的MapFutureMapdynamic, dynamic getBucketObjects(String prefix) async {//listObjectsV2:列出指定桶中的对象。它返回一个 Stream 对象该对象会按需逐个返回对象信息。final objects minio.listObjectsV2(bucketName, prefix: prefix, recursive: false);final map {};await for (var obj in objects) {final prefixs obj.prefixes.map((e) {final index e.lastIndexOf(/) 1;final prefix e.substring(0, index);final key e;return Prefix(key: key, prefix: prefix, isPrefix: true);}).toList();map[prefixes] prefixs;map[objests] obj.objects;}return map;}///获取桶列表FutureListBucket getListBuckets() async {return minio.listBuckets();}///桶是否存在Futurebool buckerExists(String bucket) async {return minio.bucketExists(bucket);}///下载文件Futurevoid downloadFile(filename) async {final dir await getExternalStorageDirectory();minio.fGetObject(bucketName, prefix filename, ${dir?.path}/${prefix filename}).then((value) {});}///上传文件FutureString uploadFile(String filename, String filePath) async {minio.fPutObject(bucketName, filename, filePath);//返回上传文件的完整访问路径return getUrl(filename);}///批量上传文件Futurevoid uploadFiles(ListString filepaths, String bucketName) async {for (String filepath in filepaths) {String filename filepath.split(/).last;await minio.fPutObject(bucketName, filename, filepath,);}}String getUrl(String filename) {return http://${minio.endPoint}:${minio.port}/$bucketName/$filename;}///用于生成一个预签名的 URL该 URL 允许在一定时间内以有限的权限直接访问 MinIO 存储桶中的对象FutureString presignedGetObject(String filename, {int? expires}) {return minio.presignedGetObject(bucketName, filename, expires: expires);}///获取一个文件一天的访问链接FutureString getPreviewUrl(String filename) {return presignedGetObject(filename, expires: 60 * 60 * 24);}/// 可多删除和单删除Futurevoid removeFiles(ListString filenames) {return minio.removeObjects(bucketName, filenames);}///创建桶Futurevoid createBucket(String bucketName) {minio.makeBucket(bucketName);//设置桶的公用权限这样外界才能通过链接访问return minio.setBucketPolicy(bucketName, {Version: 2012-10-17,Statement: [{Sid: PublicRead,//一个可选参数表示这个策略的 ID可以随意填写。Effect: Allow,//表示策略的效果如果希望所有人都可以读取那么这里就填写 Allow。Principal: *,//表示策略的主体如果希望所有人都可以读取那么这里就填写 *。Action: [s3:GetObject],//一个数组表示允许的操作如果希望所有人都可以读取那么就填写 [s3:GetObject]。Resource: [arn:aws:s3:::$bucketName/*]//一个数组表示策略的资源如果希望所有人都可以读取桶中的所有对象那么就填写 [arn:aws:s3:::your_bucket/*]。}]});}///移除桶Futurevoid removeBucket(String bucketName) {return minio.removeBucket(bucketName);}///用于获取 MinIO 存储桶中对象的部分内容即获取对象的部分数据。这个函数可以用于实现断点续传、分片下载或其他需要获取对象部分内容的场景。Futuredynamic getPartialObject(String bucketName, String filename, String filePath,{required void Function(int downloadSize, int? fileSize) onListen,required void Function(int downloadSize, int? fileSize) onCompleted,required void Function(StreamSubscriptionListint subscription)onStart}) async {final stat await this.minio.statObject(bucketName, filename);final dir dirname(filePath);await Directory(dir).create(recursive: true);final partFileName $filePath.${stat.etag}.part.minio;final partFile File(partFileName);IOSink partFileStream;var offset 0;final rename () partFile.rename(filePath);if (await partFile.exists()) {final localStat await partFile.stat();if (stat.size localStat.size) return rename();offset localStat.size;partFileStream partFile.openWrite(mode: FileMode.append);} else {partFileStream partFile.openWrite(mode: FileMode.write);}final dataStream (await minio.getPartialObject(bucketName, filename, offset)).asBroadcastStream(onListen: (sub) {if (onStart ! null) {onStart(sub);}});Future.delayed(Duration.zero).then((_) {final listen dataStream.listen((data) {if (onListen ! null) {onListen(partFile.statSync().size, stat.size);}});listen.onDone(() {if (onListen ! null) {onListen(partFile.statSync().size, stat.size);}listen.cancel();});});await dataStream.pipe(partFileStream);if (onCompleted ! null) {onCompleted(partFile.statSync().size, stat.size);}final localStat await partFile.stat();if (localStat.size ! stat.size) {throw MinioError(Size mismatch between downloaded file and the object);}return rename();} }
http://www.pierceye.com/news/850697/

相关文章:

  • 网站的运营和维护专业做网站官网
  • 详细论述制作网站的步骤做网站需求 后期方便优化
  • 蒙icp备 网站建设学校网站建设管理
  • 做免费外贸网站册域名网站大全免黄
  • 祈网网站建设制作网站如何赚钱
  • 最讨厌网站门户类网站的主页设计
  • 国家建设环保局网站网站做的好赚钱吗
  • 如何设置网站服务器做标签的网站
  • 网站建设高端培训学校做网站交易平台
  • 公司网站建设收费优化网站排名解析推广
  • 昆明快速建站模板汽车网站建设多少钱
  • 网站注销主体注销广州联享网站建设公司怎么样
  • 中山seo建站新手建站教程报价单
  • 台州制作网站软件陈坤做直播在哪个网站
  • 北湖区网站建设公司企业主题wordpress 含演示数据
  • 网站建设简历自我评价做招聘信息的网站有哪些内容
  • 怎么和其它网站做友情链接网络营销师证怎么考
  • 百度推广要自己做网站吗做的视频传到哪个网站好
  • 个人建设门户网站 如何备案网站推广服务报价表
  • 广州企业网站建设哪家服务好西安家政公司网站建设
  • 住房与城乡建设部网站 黑龙江wordpress 采集系统
  • 阜阳网站建设云平台玉溪建设局门户网站
  • 网站建设什么原因最主要怎么制作网站首页
  • 网站建设深圳赶集网网页设计工程师工资
  • 哪家企业网站建设好闵行区网站制作
  • 重庆行业网站建设陕西省建设监理协会查询官方网站
  • 手机网站 尺寸网站规划的认识
  • 永川网站制作联系电话wordpress 参数 传递
  • 西宁市网站建设高端网站开发人员要求
  • 前端做商城网站需要多久yum wordpress