Flutter插件flutter_nos的使用方法详解
Flutter插件flutter_nos的使用方法详解
Flutter 版的网易数帆对象存储直传 SDK,支持 Android & iOS。
开始使用
添加依赖:
dependencies:
flutter_nos: ^{latest_version}
用法
第一步,初始化:
final _nosUploader = FlutterNos();
[@override](/user/override)
void initState() {
_nosUploader.init();
}
第二步,设置上传成功后的回调:
_nosUploader.setOnSuccess((message) {
// 上传成功
print('flutter_nos: ==============> upload success, message = $message');
});
第三步,调用上传接口:
// 先调用后端接口获取 token 数据
var nosToken = await getTokenRequest();
var bucketName = nosToken.bucketName ?? '';
var objName = nosToken.objName ?? '';
var uploadToken = nosToken.uploadToken ?? '';
var imagePath = _chosenPic;
// 开始上传图片
_nosUploader.uploadImage(bucketName, objName, uploadToken, imagePath);
示例代码
以下是完整的示例代码:
import 'dart:async';
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_nos/flutter_nos.dart';
import 'package:flutter_nos_example/nos_token.dart';
import 'package:http/http.dart' as http;
import 'package:image_cropper/image_cropper.dart';
import 'package:image_picker/image_picker.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final _nosUploader = FlutterNos();
final _imagePicker = ImagePicker();
final _imageCropper = ImageCropper();
String _chosenPic = '';
String avatarUrl = '';
String _avatarUrl = '';
[@override](/user/override)
void initState() {
super.initState();
_nosUploader.init();
_nosUploader.setOnSuccess((message) {
// 上传成功
print('flutter_nos: ==============> upload success, message = $message');
setState(() {
avatarUrl = _avatarUrl;
});
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('flutter_nos 插件示例'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () {
chooseImage();
},
child: const Text('选择图片')),
if (_chosenPic.isNotEmpty) Image.asset(_chosenPic),
const SizedBox(height: 16),
ElevatedButton(
onPressed: () {
uploadImage();
},
child: const Text('上传图片')),
if (avatarUrl.isNotEmpty)
Image.network(
avatarUrl,
width: 200,
height: 200,
fit: BoxFit.contain,
),
],
),
),
),
);
}
Future<void> chooseImage() async {
final XFile? image =
await _imagePicker.pickImage(source: ImageSource.gallery);
if (image != null) {
CroppedFile? croppedFile = await _imageCropper.cropImage(
sourcePath: image.path,
uiSettings: [
AndroidUiSettings(
toolbarTitle: '图片裁剪',
toolbarWidgetColor: Colors.white,
initAspectRatio: CropAspectRatioPreset.original,
lockAspectRatio: false,
hideBottomControls: true,
),
IOSUiSettings(
minimumAspectRatio: 1.0,
cancelButtonTitle: '取消',
doneButtonTitle: '完成',
),
],
);
if (croppedFile != null) {
setState(() => _chosenPic = croppedFile.path);
}
}
}
Future<NosToken> getTokenRequest() async {
// 向后端发起请求,获取 token 和图片链接
final response = await http.get(Uri.parse('https://request_url'));
if (response.statusCode == 200) {
// TODO: 根据实际业务需求修改数据结构
return NosToken.fromJson(jsonDecode(response.body));
} else {
throw Exception('请求失败');
}
}
Future<void> uploadImage() async {
var nosToken = await getTokenRequest();
var bucketName = nosToken.bucketName ?? '';
var objName = nosToken.objName ?? '';
var uploadToken = nosToken.uploadToken ?? '';
var imagePath = _chosenPic;
// 开始上传图片
_nosUploader.uploadImage(bucketName, objName, uploadToken, imagePath);
// 保存图片链接
_avatarUrl = nosToken.targetUrl ?? '';
}
}
更多关于Flutter插件flutter_nos的使用方法详解的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter插件flutter_nos的使用方法详解的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_nos
是一个Flutter插件,专门用于集成网易云信的对象存储服务(NOS)。NOS(Netease Object Storage)是网易云信提供的一种云存储服务,类似于阿里云的OSS、腾讯云的COS等。通过 flutter_nos
插件,开发者可以在Flutter应用中轻松实现文件的上传、下载、删除等操作。
flutter_nos
插件的潜在用途
-
文件上传与下载
- 应用场景:用户可以在应用中上传图片、视频、音频等文件到NOS,并随时下载这些文件。
- 示例:社交类应用中的图片分享、视频上传;教育类应用中的课件下载。
-
多媒体资源管理
- 应用场景:应用中的多媒体资源(如图片、视频)可以存储在NOS中,通过插件进行管理。
- 示例:电商应用中的商品图片、视频展示;新闻类应用中的图片和视频新闻。
-
数据备份与恢复
- 应用场景:用户的重要数据可以备份到NOS中,需要时可以恢复。
- 示例:笔记类应用中的笔记备份;健康类应用中的健康数据备份。
-
跨平台文件同步
- 应用场景:用户在不同设备上使用应用时,可以通过NOS实现文件的同步。
- 示例:跨平台的笔记应用、文件管理应用。
-
大规模文件存储与分发
- 应用场景:对于需要存储和分发大规模文件的应用,NOS提供了高效的解决方案。
- 示例:在线教育平台中的课程资源分发;企业内部的文档共享平台。
-
安全与权限控制
- 应用场景:通过NOS的权限控制功能,可以设置文件的访问权限,确保数据安全。
- 示例:企业内部的文件管理系统;医疗应用中的患者隐私数据存储。
-
日志与监控
- 应用场景:NOS提供了日志和监控功能,可以记录文件的上传、下载等操作,便于审计和监控。
- 示例:企业级应用中的操作日志记录;安全敏感应用中的操作监控。
使用 flutter_nos
的优势
- 易集成:
flutter_nos
提供了简洁的API,便于开发者快速集成NOS服务。 - 跨平台:支持iOS和Android平台,确保应用在不同设备上的一致性。
- 高效稳定:基于网易云信的NOS服务,提供高效的存储和分发能力,确保应用的稳定性。
- 安全性:支持多种权限控制和加密方式,确保数据的安全性。
使用示例
以下是一个简单的 flutter_nos
使用示例,展示如何上传文件到NOS:
import 'package:flutter_nos/flutter_nos.dart';
void uploadFile() async {
// 初始化NOS客户端
NOS nos = NOS(
accessKey: 'your_access_key',
secretKey: 'your_secret_key',
endpoint: 'your_endpoint',
bucketName: 'your_bucket_name',
);
// 上传文件
String filePath = '/path/to/your/file';
String objectKey = 'your_object_key';
try {
await nos.uploadFile(filePath, objectKey);
print('File uploaded successfully');
} catch (e) {
print('Failed to upload file: $e');
}
}