Flutter Oracle对象存储插件oracle_object_storage的使用

发布于 1周前 作者 h691938207 来自 Flutter

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'
);

对象操作

多部分上传

创建多部分上传文件的顺序:

  1. CreateMultipartUpload
  2. UploadPart {发送文件主体/内容/字节}
  3. CommitMultipartUpload {最终确定/组装已发送的部分以创建单个文件}

预授权请求

桶操作

命名空间操作

对象生命周期策略

完整示例

以下是一个完整的示例,展示了如何使用 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

1 回复

更多关于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'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

注意事项:

  1. 认证配置:在实际使用中,你需要正确配置OCI的认证信息。这通常涉及到加载OCI的配置文件或设置相关的环境变量。
  2. 依赖版本:确保你使用的是oracle_object_storage插件的最新版本,并查看其官方文档以获取最新的使用指南和API变更。
  3. 错误处理:在实际应用中,你可能需要更详细的错误处理逻辑,以便更好地处理上传和下载过程中可能发生的各种异常。

这个示例代码提供了一个基本的框架,展示了如何在Flutter应用中使用oracle_object_storage插件进行文件的上传和下载。根据你的具体需求,你可能需要调整代码以适应你的应用场景。

回到顶部