我正在尝试使用带有以下代码的multi_image_picker上传多个文件,但标题中出现错误。我正在按照document中的代码进行操作,但不确定是否以正确的方式进行操作。 预先感谢
Future<void> sendDataToServer() async {
// string to uri
Uri uri = Uri.parse(Settings.SERVER_URL + 'api/uploadproduct');
// create multipart request
MultipartRequest request = http.MultipartRequest("POST", uri);
request.fields['name'] = productName;
List.generate(images.length, (index) async {
Asset asset = images[index];
ByteData byteData = await asset.getByteData();
List<int> imageData = byteData.buffer.asUint8List();
MultipartFile multipartFile = MultipartFile.fromBytes(
'photos',
imageData,
filename: 'some-file-name.jpg',
contentType: MediaType("image", "jpg"),
);
// add file to multipart
request.files.add(multipartFile);
});
// send
var response = await request.send();
}
更新和解决方案
感谢@Richard Heap的答案,我可以找到一个解决方案,在这里添加解决方案,因为他的答案不是完整的解决方案:
Future<void> sendDataToServer() async {
// string to uri
Uri uri = Uri.parse(Settings.SERVER_URL + 'api/uploadproduct');
// create multipart request
MultipartRequest request = http.MultipartRequest("POST", uri);
request.fields['name'] = productName;
for (var asset in images) { {
Asset asset = images[index];
ByteData byteData = await asset.getByteData();
List<int> imageData = byteData.buffer.asUint8List();
MultipartFile multipartFile = MultipartFile.fromBytes(
'photos[]', //this [] little change was needed to make it work
imageData,
filename: 'some-file-name.jpg',
contentType: MediaType("image", "jpg"),
);
// add file to multipart
request.files.add(multipartFile);
};
// send
var response = await request.send();
}
答案 0 :(得分:1)
将List.generate
更改为:
var i = 0;
for (var asset in images) {
i++;
var multipartFile = MultipartFile.fromBytes(
'photo$i',
(await asset.getByteData()).buffer.asUint8List(),
filename: 'photo$i.jpg', // use the real name if available, or omit
contentType: MediaType('image', 'jpg'),
);
request.files.add(multipartFile);
}
这将导致编号为photo1
,photo2
等的参数。
您添加[]
的技巧可能仅适用于基于PHP的服务器,该服务器知道后缀表示称为photos
的参数数组。单独编号的方法更为通用。
答案 1 :(得分:0)
我遇到了同样的问题
Files.forEach((val) async{
var MyFile = await http.MultipartFile.fromPath('MediaFiles[]',val);
Multi.files.add(
MyFile,
);
});
我只将“ forEach”更改为“ for”循环,并为我工作。
工作代码
for(var val in Files){
var MyFile = await http.MultipartFile.fromPath('MediaFiles[]',val);
Multi.files.add(
MyFile,
);
}