在Flutter中,可以使用Dio库和MultipartFormData来拾取多张图片并通过RestAPI上传。以下是一个实现该功能的示例代码:
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:dio/dio.dart';
class ImageUploadPage extends StatefulWidget {
@override
_ImageUploadPageState createState() => _ImageUploadPageState();
}
class _ImageUploadPageState extends State<ImageUploadPage> {
List<XFile>? _imageFiles;
Future<void> _pickImages() async {
final picker = ImagePicker();
final pickedImages = await picker.pickMultiImage(); // 选择多张图片
setState(() {
_imageFiles = pickedImages;
});
}
Future<void> _uploadImages() async {
if (_imageFiles != null) {
for (final imageFile in _imageFiles!) {
final formData = FormData.fromMap({
'image': await MultipartFile.fromFile(imageFile.path),
});
final response = await Dio().post(
'YOUR_REST_API_ENDPOINT',
data: formData,
);
print(response.data); // 上传成功后的响应结果
}
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Image Upload'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: _pickImages,
child: Text('Pick Images'),
),
SizedBox(height: 20),
if (_imageFiles != null)
Column(
children: _imageFiles!.map((file) => Image.file(File(file.path))).toList(),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _uploadImages,
child: Text('Upload Images'),
),
],
),
),
);
}
}
在上述代码中,我们使用了ImagePicker
库来选择多张图片,并将选中的图片保存在_imageFiles
列表中。然后,我们使用Dio库中的MultipartFile
和FormData
来创建一个包含图片文件的表单数据,并使用Dio库的post
方法将表单数据上传到指定的REST API端点。
注意:在实际使用中,你需要将'YOUR_REST_API_ENDPOINT'替换为你自己的REST API端点。
希望以上代码能帮助到你!如有其他问题,请随时提问。
领取专属 10元无门槛券
手把手带您无忧上云