我尝试使用Archive库在Dart中编写代码,将用户上传的图像打包成Zip文件,然后将该zip文件上传到Firebase。然而,我的编译器说它无法打开该文件。下面是我的代码:
Future<String> zipImages(List<FFUploadedFile> images) async {
final archive = Archive();
for (for final image in images; i++) {
print(image);
Uint8List? bytes = image.bytes;
Future<File> createTemporaryFile(Uint8List? bytes, int num) async {
Directory tempDir = await getTemporaryDirectory();
String tempPath = tempDir.path + '/image';
File tempFile = File(tempPath);
await tempFile.writeAsBytes(bytes as List<int>);
return tempFile;
}
File tempFile = await createTemporaryFile(bytes, i);
final bytesFromFile = await tempFile.readAsBytes();
final archiveFile =
ArchiveFile('uploadedImages', bytesFromFile.length, bytesFromFile);
archive.addFile(archiveFile);
}
final zipEncoder = ZipEncoder();
final encodedArchive = zipEncoder.encode(archive);
if (encodedArchive == null) return "error";
final zipFile = await File('images.zip').writeAsBytes(encodedArchive);
字符串
我是否需要在其他地方更改某些访问文件?请帮助我解决此问题。
1条答案
按热度按时间z18hc3ub1#
这段代码似乎有一些问题。
看起来循环遍历图像可能有语法错误,并且函数
createTemporaryFile
被定义在循环内部,这是不必要的,可能会导致问题。尝试使用以下修改的代码段,
字符串
变化,
1.将
createTemporaryFile
函数的定义移到循环之外。2.将循环迭代更改为更常规的格式。
3.为临时目录中的每个图像文件使用唯一的名称。
4.添加了一个return语句,用于返回
zipImages
函数中创建的zip文件的路径。确保您有正确的错误处理和必要的导入
(import 'dart:io';, import 'dart:typed_data';, and package:archive/archive.dart)
。另外,请确保正确定义
FFUploadedFile
类或相关数据结构,并授予访问目录/文件的权限。