Commit 4b6090c3 by tanghuan

下载保存文件接口,让用户选择保存路径

1 parent 550a8915
......@@ -4,6 +4,7 @@ import 'package:appframe/services/dispatcher.dart';
import 'package:dio/dio.dart';
import 'package:file_picker/file_picker.dart';
import 'package:path/path.dart' as path;
import 'package:path_provider/path_provider.dart';
class SaveFileToDisKHandler extends MessageHandler {
@override
......@@ -17,17 +18,25 @@ class SaveFileToDisKHandler extends MessageHandler {
throw Exception('参数错误');
}
// 让用户选择保存目录
String? selectedDirectory = await FilePicker.platform.getDirectoryPath();
// 获取filePath中的文件名,以及后缀名
var fileName = path.basenameWithoutExtension(filePath);
var ext = path.extension(filePath);
var fileName = params['fileName'] as String? ?? '';
// 临时目录
var dir = await getTemporaryDirectory();
// 要保存的文件名和扩展名
String saveFileName, ext;
if (fileName.isEmpty) {
saveFileName = path.basenameWithoutExtension(filePath);
ext = path.extension(filePath);
} else {
saveFileName = path.basenameWithoutExtension(fileName);
ext = path.extension(fileName);
}
// 要保存的路径
var targetPath = path.join(selectedDirectory!, '$fileName.$ext');
var targetPath = path.join(dir.path, '$saveFileName.$ext');
// 如果文件存在,则在文件名后添加数字
int i = 1;
while (File(targetPath).existsSync()) {
targetPath = path.join(selectedDirectory, '$fileName($i).$ext');
targetPath = path.join(dir.path, '$saveFileName($i).$ext');
i++;
}
......@@ -36,11 +45,14 @@ class SaveFileToDisKHandler extends MessageHandler {
if (resp.statusCode != 200) {
throw Exception('文件下载失败');
}
await FilePicker.platform.saveFile(bytes: File(targetPath).readAsBytesSync(), fileName: fileName);
return true;
} else {
// 将filePath路径的文件保存到targetPath
final f = await File(filePath).copy(targetPath);
var f = File(filePath);
if (f.existsSync()) {
await FilePicker.platform.saveFile(bytes: f.readAsBytesSync(), fileName: fileName);
return true;
} else {
return false;
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!