我使用以下代码从前端发布一个文件:
final request =MultipartRequest('GET', Uri.parse('http://192.168.0.8:8080/sendfile'));
request.files.add(await MultipartFile.fromPath('fromFilePath', 'file.pdf'));
StreamedResponse response = await request.send();
然后,尝试在机框后端使用以下代码解码此请求:
FutureOr<Response> fileHandler(Request request) async {
try {
final _body = await request.readAsString(); //! stacked here
final _map = jsonDecode(_body);
List<dynamic> _fromFilePath = [];
_fromFilePath.add(_map['fromFilePath']);
return Response.ok('Success');
} catch (_) {
return Response.internalServerError(body: 'Internal Server Error');
}
}
因此,我的问题是,如何解码请求中的文件?
我不确定。我使用的是shelf_router
,但此方法也使用Request request
。我的代码看起来像这样。
..post("/test", (Request request) async {
Map data = {}, files = {};
final List<FormData> formDataList = await request.multipartFormData.toList();
for (FormData formData in formDataList) {
if (formData.filename == null) {
String dataString = await formData.part.readString();
data[formData.name] = jsonDecode(dataString);
} else if (formData.filename is String) {
files[formData.name] = await formData.part.readBytes();
}
}
print(data);
print(files.keys);
return Response.ok("test");
})
在我的请求中,我使用form-data
并使用request.files.addAll(fileList);
传递这些文件
我希望这将帮助你:(