Flutter文件上传至OSS插件upload_file_oss的使用

Flutter文件上传至OSS插件upload_file_oss的使用

Pub

一个简单上传文件到阿里云对象存储OSS的库。仅支持小文件上传。

安装

引入文件:

import 'package:upload_file_oss/upload_file_oss.dart';

使用

详细见 example/lib/main.dart

final UploadFileOSSClient client = UploadFileOSSClient(
  UploadFileOSSConfig(
    accessKeyId: '', // 替换为你的阿里云OSS访问密钥ID
    accessKeySecret: '', // 替换为你的阿里云OSS访问密钥Secret
    endpoint: 'oss-cn-hangzhou.aliyuncs.com', // 替换为你的OSS服务端点
    bucket: '', // 替换为你的OSS存储桶名称
    fileDomain: '', // 替换为你的OSS文件域名
  ),
);

/// 本地文件路径
final String localFilePath = '/Users/xx.png'; // 替换为你要上传的本地文件路径

/// Object 存在OSS上的文件路径
final String savePath = 'avatar/me.jpg'; // 替换为你希望保存在OSS上的文件路径

/// 读取本地的文件,并转换为Uint8List
final File file = File(localFilePath);
final Uint8List fileContent = await file.readAsBytes();

/// 执行上传到 OSS
Map res = await client.putObject(
  savePath,
  fileContent,
  overwrite: false, // 设置是否覆盖已存在的同名文件
);
print(res);

上传返回

上传成功返回:

{
  "statusCode": 200, 
  "size": 3506, 
  "downloadUrl": "https://yourbucket.oss-cn-hangzhou.aliyuncs.com/avatar/me.jpg", 
  "url": "https://yourfiledomain/avatar/me.jpg",
}

上传失败返回:

{
  "statusCode": 4xx, 
  "size": 0, 
  "downloadUrl": "", 
  "url": "",
}

更多关于Flutter文件上传至OSS插件upload_file_oss的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter文件上传至OSS插件upload_file_oss的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter应用中使用upload_file_oss插件将文件上传到阿里云OSS(对象存储服务)的一个基本示例。请注意,为了保持代码的专业性和完整性,我会包括必要的依赖项配置、插件初始化以及文件上传的代码示例。

1. 添加依赖项

首先,在你的Flutter项目的pubspec.yaml文件中添加upload_file_oss依赖项:

dependencies:
  flutter:
    sdk: flutter
  upload_file_oss: ^latest_version  # 请替换为最新版本号

2. 导入插件

在你的Dart文件中(例如main.dart),导入upload_file_oss插件:

import 'package:upload_file_oss/upload_file_oss.dart';

3. 配置阿里云OSS信息

在你的应用中配置阿里云OSS的相关信息,包括Endpoint、AccessKeyId、AccessKeySecret、BucketName和Region。这些信息通常可以在阿里云OSS控制台中找到。

4. 初始化OSS客户端并上传文件

以下是一个完整的示例,展示如何初始化OSS客户端并上传文件:

import 'package:flutter/material.dart';
import 'package:upload_file_oss/upload_file_oss.dart';
import 'dart:io';
import 'dart:typed_data';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter OSS Upload Example'),
        ),
        body: Center(
          child: UploadButton(),
        ),
      ),
    );
  }
}

class UploadButton extends StatefulWidget {
  @override
  _UploadButtonState createState() => _UploadButtonState();
}

class _UploadButtonState extends State<UploadButton> {
  final String endpoint = 'your-oss-endpoint'; // 替换为你的OSS Endpoint
  final String accessKeyId = 'your-access-key-id'; // 替换为你的AccessKeyId
  final String accessKeySecret = 'your-access-key-secret'; // 替换为你的AccessKeySecret
  final String bucketName = 'your-bucket-name'; // 替换为你的BucketName
  final String region = 'your-region'; // 替换为你的Region

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: () async {
        // 选择文件
        FilePickerResult result = await FilePicker.platform.pickFiles();

        if (result != null && result.files.isNotEmpty) {
          File file = File(result.files.first.path!);
          Uint8List fileBytes = await file.readAsBytes();

          // 初始化OSS客户端
          OSS ossClient = await OSS.init(
            endpoint: endpoint,
            accessKeyId: accessKeyId,
            accessKeySecret: accessKeySecret,
            bucketName: bucketName,
            region: region,
          );

          // 上传文件
          try {
            String objectName = 'your-directory/${file.basename}'; // 设置上传后的文件名和路径
            await ossClient.putObject(objectName, fileBytes);
            print('File uploaded successfully: $objectName');
          } catch (e) {
            print('Failed to upload file: $e');
          }
        }
      },
      child: Text('Upload File'),
    );
  }
}

注意事项

  1. 依赖项版本:确保你使用的是upload_file_oss插件的最新版本。
  2. 安全性:不要在客户端代码中硬编码AccessKeyId和AccessKeySecret。考虑使用STS(安全令牌服务)或其他安全机制来获取临时访问凭证。
  3. 文件选择:上面的示例使用了file_picker插件来选择文件,你需要确保已经添加了该插件的依赖。
  4. 错误处理:在生产环境中,应该添加更详细的错误处理和用户反馈机制。

希望这个示例能帮助你在Flutter应用中成功实现文件上传到阿里云OSS的功能。

回到顶部