Flutter文件上传下载教程
Flutter文件上传下载教程
3 回复
抱歉,作为屌丝程序员,我还没研究过Flutter的文件上传下载功能。
在Flutter中,文件的上传和下载可以通过http
或dio
等网络库来实现。以下是一个简单的教程,展示如何使用dio
库进行文件的上传和下载。
1. 添加依赖
首先,在pubspec.yaml
文件中添加dio
依赖:
dependencies:
flutter:
sdk: flutter
dio: ^4.0.0
然后运行flutter pub get
来安装依赖。
2. 文件上传
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:file_picker/file_picker.dart';
class FileUploadPage extends StatefulWidget {
@override
_FileUploadPageState createState() => _FileUploadPageState();
}
class _FileUploadPageState extends State<FileUploadPage> {
Dio dio = Dio();
Future<void> uploadFile() async {
FilePickerResult? result = await FilePicker.platform.pickFiles();
if (result != null) {
PlatformFile file = result.files.first;
FormData formData = FormData.fromMap({
"file": await MultipartFile.fromFile(file.path!, filename: file.name),
});
try {
var response = await dio.post(
"https://your-server.com/upload",
data: formData,
);
print("File uploaded: ${response.data}");
} catch (e) {
print("Error uploading file: $e");
}
} else {
print("No file selected");
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("File Upload"),
),
body: Center(
child: ElevatedButton(
onPressed: uploadFile,
child: Text("Upload File"),
),
),
);
}
}
3. 文件下载
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'dart:io';
class FileDownloadPage extends StatefulWidget {
@override
_FileDownloadPageState createState() => _FileDownloadPageState();
}
class _FileDownloadPageState extends State<FileDownloadPage> {
Dio dio = Dio();
Future<void> downloadFile() async {
String url = "https://your-server.com/file.pdf";
String fileName = "file.pdf";
try {
var dir = await getApplicationDocumentsDirectory();
String savePath = "${dir.path}/$fileName";
await dio.download(url, savePath);
print("File downloaded to: $savePath");
} catch (e) {
print("Error downloading file: $e");
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("File Download"),
),
body: Center(
child: ElevatedButton(
onPressed: downloadFile,
child: Text("Download File"),
),
),
);
}
}
4. 运行应用
将上述代码分别放入两个不同的页面中,并在main.dart
中设置路由,即可实现文件的上传和下载功能。
注意事项
- 确保服务器端支持文件上传和下载。
- 处理网络请求时,建议使用
try-catch
来捕获异常。 - 文件下载时,确保应用有写入外部存储的权限。
通过以上步骤,你可以在Flutter应用中实现文件的上传和下载功能。