Flutter Oracle对象存储插件oracle_object_storage的使用
Flutter Oracle对象存储插件oracle_object_storage的使用
Oracle Cloud Object Storage
包用于构建用于通过基于 文档 的 REST API 请求方法的必要头。如何为此包贡献
如何创建您的 API 密钥 以访问桶
如何实例化 OracleObjectStorage
对象以进行 REST API 请求
final OracleObjectStorage storage = OracleObjectStorage(
nameSpace: '...',
bucketName: '...',
region: '...',
tenancy: 'ocid1.tenancy.oc1..aaaaa...',
user: 'ocid1.user.oc1..aaaaaa...',
apiPrivateKey: ApiPrivateKey.fromValue(
key: '''
-----BEGIN PRIVATE KEY-----
MIIEvAIBAD......JkvgJg4YINu72u7MQ==
-----END PRIVATE KEY-----
OCI_API_KEY
''',
fingerprint: 'od:b5:h6:44:1b:...'
),
);
final OracleObjectStorage storage = OracleObjectStorage(
nameSpace: '...',
bucketName: '...',
region: '...',
tenancy: 'ocid1.tenancy.oc1..aaaa...',
user: 'ocid1.user.oc1..aaaaaaa...',
apiPrivateKey: ApiPrivateKey.fromFile(
fullPath: '.../.oci/private_key.pem',
fingerprint: 'od:b5:h6:44:1b:...'
),
);
.../.oci/config.json
{
"nameSpace": "...",
"bucketName": "...",
"region": "...",
"user": "ocid1.user.oc1..aaaaaa...",
"tenancy": "ocid1.tenancy.oc1..aaaaa..."
"fingerprint": "od:b5:h6:44:1b:...",
}
final OracleObjectStorage storage = OracleObjectStorage.fromConfig(
configFullPath: '.../.oci/config.json',
privateKeyFullPath: '.../.oci/private_key.pem'
);
对象操作
- CopyObject
- DeleteObject
- GetObject
- HeadObject
- ListObjectVersions
- ListObjects
- PutObject
- RenameObject
- RestoreObjects
- UpdateObjectStorageTier
多部分上传
- CreateMultipartUpload
- AbortMultipartUpload
- CommitMultipartUpload
- ListMultipartUploadParts
- ListMultipartUploads
- UploadPart
创建多部分上传文件的顺序:
- CreateMultipartUpload
- UploadPart {发送文件主体/内容/字节}
- CommitMultipartUpload {最终确定/组装已发送的部分以创建单个文件}
预授权请求
- CreatePreauthenticatedRequest
- DeletePreauthenticatedRequest
- GetPreauthenticatedRequest
- ListPreauthenticatedRequests
桶操作
命名空间操作
对象生命周期策略
完整示例
以下是一个完整的示例,展示了如何使用 oracle_object_storage
插件将文件上传到 Oracle 对象存储。
import 'dart:io' show File;
import 'dart:typed_data' show Uint8List;
import 'dart:developer' show log;
import 'package:http/http.dart' as http;
import 'package:oracle_object_storage/oracle_object_storage.dart';
void main() async {
// 实例化 OracleObjectStorage 对象
final OracleObjectStorage storage = OracleObjectStorage(
nameSpace: 'your_namespace',
bucketName: 'your_bucket_name',
region: 'your_region',
tenancy: 'your_tenancy_ocid',
user: 'your_user_ocid',
apiPrivateKey: ApiPrivateKey.fromFile(
fullPath: 'path_to_your_private_key.pem',
fingerprint: 'your_fingerprint',
),
);
// 读取文件内容
final File file = File('/path/to/your/file.jpg');
final Uint8List bytes = await file.readAsBytes();
// 准备上传文件
final PutObject put = storage.object.putObject(
pathAndFileName: '/users/profilePictures/fileName.jpg',
xContentSha256: bytes.toSha256Base64,
contentLength: bytes.length.toString(),
contentType: 'image/jpeg',
addHeaders: <String, String>{
'opc-meta-fileName': 'fileName.jpg',
'opc-meta-expiryDate': DateTime.now().toString(),
},
);
// 发送 HTTP 请求
final http.Response response = await http.put(
Uri.parse(put.uri),
body: bytes,
headers: put.headers,
);
// 打印响应状态码
log(
'${response.statusCode}',
name: 'main > $PutObject',
);
}
更多关于Flutter Oracle对象存储插件oracle_object_storage的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter Oracle对象存储插件oracle_object_storage的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter应用中使用oracle_object_storage
插件的示例代码。这个插件允许你与Oracle对象存储服务进行交互。需要注意的是,在实际使用中,你需要确保已经正确配置了Oracle Cloud Infrastructure(OCI)的认证信息。
首先,确保你已经在你的pubspec.yaml
文件中添加了oracle_object_storage
依赖:
dependencies:
flutter:
sdk: flutter
oracle_object_storage: ^最新版本号 # 替换为实际最新版本号
然后运行flutter pub get
来获取依赖。
接下来是一个简单的示例代码,展示了如何使用这个插件来上传和下载对象到Oracle对象存储:
import 'package:flutter/material.dart';
import 'package:oracle_object_storage/oracle_object_storage.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final ObjectStorage _objectStorage = ObjectStorage();
String _uploadStatus = 'Not Uploaded';
String _downloadStatus = 'Not Downloaded';
@override
void initState() {
super.initState();
// 配置OCI认证信息,通常是通过配置文件或环境变量
// 这里假设已经正确配置了OCI SDK的默认认证方式
_configureOciAuth();
}
Future<void> _configureOciAuth() async {
// 通常,这一步会涉及加载OCI的配置文件或设置环境变量
// 示例中假设这些配置已经预先完成
// 如果需要动态配置,可以在这里调用相关的认证配置函数
}
Future<void> _uploadFile() async {
String bucketName = 'your-bucket-name';
String objectName = 'test-upload.txt';
String filePath = 'path/to/your/local/file.txt';
try {
await _objectStorage.putObject(bucketName, objectName, filePath);
setState(() {
_uploadStatus = 'Uploaded Successfully';
});
} catch (e) {
setState(() {
_uploadStatus = 'Upload Failed: ${e.message}';
});
}
}
Future<void> _downloadFile() async {
String bucketName = 'your-bucket-name';
String objectName = 'test-upload.txt';
String downloadPath = 'path/to/your/download/directory/file.txt';
try {
await _objectStorage.getObject(bucketName, objectName, downloadPath);
setState(() {
_downloadStatus = 'Downloaded Successfully';
});
} catch (e) {
setState(() {
_downloadStatus = 'Download Failed: ${e.message}';
});
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Oracle Object Storage Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Upload Status: $_uploadStatus'),
SizedBox(height: 20),
ElevatedButton(
onPressed: _uploadFile,
child: Text('Upload File'),
),
SizedBox(height: 20),
Text('Download Status: $_downloadStatus'),
SizedBox(height: 20),
ElevatedButton(
onPressed: _downloadFile,
child: Text('Download File'),
),
],
),
),
),
);
}
}
注意事项:
- 认证配置:在实际使用中,你需要正确配置OCI的认证信息。这通常涉及到加载OCI的配置文件或设置相关的环境变量。
- 依赖版本:确保你使用的是
oracle_object_storage
插件的最新版本,并查看其官方文档以获取最新的使用指南和API变更。 - 错误处理:在实际应用中,你可能需要更详细的错误处理逻辑,以便更好地处理上传和下载过程中可能发生的各种异常。
这个示例代码提供了一个基本的框架,展示了如何在Flutter应用中使用oracle_object_storage
插件进行文件的上传和下载。根据你的具体需求,你可能需要调整代码以适应你的应用场景。