如何用Dart将Blob转换为Appwrite的InputFile
解决方案:Dart中将Blob转换为List用于Appwrite存储
在Dart的Web环境中(依赖dart:html),可以通过FileReader API将Blob转换为List<int>,具体实现如下:
核心代码示例
import 'dart:html'; import 'package:appwrite/appwrite.dart'; import 'package:appwrite/models.dart'; Future<File> uploadBlobToAppwrite(Blob blob, String filename, String bucketId) async { // 初始化FileReader读取Blob内容 final fileReader = FileReader(); fileReader.readAsArrayBuffer(blob); // 等待读取完成 await fileReader.onLoad.first; // 将读取结果转换为List<int> final List<int> fileBytes = fileReader.result as List<int>; // 创建Appwrite所需的InputFile实例 final inputFile = InputFile.fromBytes(fileBytes, filename); // 初始化Appwrite客户端与存储服务 final client = Client() .setEndpoint('https://cloud.appwrite.io/v1') // 替换为你的Appwrite端点 .setProject('your-project-id'); // 替换为你的项目ID final storage = Storage(client); // 上传文件到Appwrite存储 return await storage.createFile( bucketId: bucketId, fileId: ID.unique(), file: inputFile, ); }
关键说明
FileReader.readAsArrayBuffer(blob):将Blob内容读取为二进制数组(ArrayBuffer)- 读取完成后,
fileReader.result可直接类型转换为List<int>,Dart会自动处理ArrayBuffer到List的映射 - 整个读取操作是异步的,必须使用
async/await等待读取完成,否则无法获取完整的二进制数据
内容的提问来源于stack exchange,提问作者nb13
相关产品推荐
相关产品推荐

