我使用Firebase云存储来存储一些文件,然后必须将它们放入zip文件并下载。我只需要在Web上进行这个操作,这是困难的部分。 现在我的做法如下:
FloatingActionButton(
child: const Icon(Icons.download),
onPressed: () async {
List<int>? bytes;
webarc.ZipEncoder encoder = webarc.ZipEncoder();
webarc.Archive archive = webarc.Archive();
try {
List<String> links = await Database.formLinks();
for (String link in links) {
String fileName = link.substring(link.lastIndexOf('/') + 1);
http.Response response = await http.get(
Uri.parse(link),
headers: headers,
);
webarc.ArchiveFile file = webarc.ArchiveFile.stream(
fileName,
response.bodyBytes.elementSizeInBytes,
response.bodyBytes.toList(),
);
archive.addFile(file);
}
webarc.OutputStream outputStream = webarc.OutputStream(
byteOrder: webarc.LITTLE_ENDIAN,
);
bytes = encoder.encode(
archive,
level: webarc.Deflate.BEST_COMPRESSION,
modified: DateTime.now(),
output: outputStream,
);
} catch (e) {
print(e);
Fluttertoast.showToast(
msg: 'Errore nel download dello zip.',
toastLength: Toast.LENGTH_LONG,
gravity: ToastGravity.BOTTOM,
);
return;
}
if (bytes == null) {
Fluttertoast.showToast(
msg: 'Errore nel download dello zip. bytes nulli.',
toastLength: Toast.LENGTH_LONG,
gravity: ToastGravity.BOTTOM,
);
return;
}
String zipFileName = 'forms.zip';
await FileSaver.instance.saveFile(
zipFileName,
Uint8List.fromList(bytes),
'zip',
mimeType: MimeType.ZIP,
);
Fluttertoast.showToast(
msg: 'Zip downloadato correttamente.',
toastLength: Toast.LENGTH_LONG,
gravity: ToastGravity.BOTTOM,
);
},
),
除了我下载的zip文件是空的之外,一切都完美无缺。
我尝试了很多不同的方法,使用html包下载,锚定并点击div,但现在我认为该软件包不起作用,我该怎么做?任何帮助都将被接受,谢谢。
附言: 这里是database.formLinks功能:
static Future<List<Reference>> getCompiledForms() async =>
(await formsRef.listAll()).items;
static Future<List<String>> formLinks() async {
final List<Reference> forms = await getCompiledForms();
final List<String> links = [];
for (final form in forms) {
String url = await form.getDownloadURL();
links.add(url);
}
return links;
这些是我在这些函数中使用的包:
archive: ^3.1.2 (作为webarc)
http: ^0.13.3 (作为http)
file_saver: ^0.0.10
fluttertoast: ^8.0.7
cloud_firestore: ^2.3.0