如何在Dart中发送大量POST数据
我正在这样做:如何在Dart中发送大量POST数据,dart,flutter,Dart,Flutter,我正在这样做: startUpload(File file) async { var bytes = await file.readAsBytes(); var base64Img = base64.encode(bytes); debugPrint(base64Img); var apiUrl = "MY_URL"; var requestBody = new Map<String, String>(); requestBody[
startUpload(File file) async {
var bytes = await file.readAsBytes();
var base64Img = base64.encode(bytes);
debugPrint(base64Img);
var apiUrl = "MY_URL";
var requestBody = new Map<String, String>();
requestBody["requestType"] = "upload";
requestBody["job_id"] = jobId.toString();
requestBody["picture"] = base64Img;
http.Response response = await http.post(apiUrl, body: requestBody);
}
startUpload(文件)异步{
var bytes=wait file.readAsBytes();
var base64Img=base64.encode(字节);
debugPrint(base64Img);
var apiUrl=“我的URL”;
var requestBody=newmap();
requestBody[“requestType”]=“upload”;
requestBody[“job_id”]=jobId.toString();
requestBody[“picture”]=base64Img;
http.Response-Response=wait-http.post(apirl,body:requestBody);
}
我注意到后端接收的base64Img
的长度比应用程序中生成的长度要小。当我调用base64Img.length
时,我得到129648,但在服务器上,我得到66401。请注意,该文件实际上是一个图像。因此,当我从服务器解码图像时,图像的下半部分不显示或以某种方式扭曲
我也用原生Android发送同样的数据,没有任何问题
所以我的问题是,dart对请求正文数据的值是否有最大长度限制,以及如何发送大数据?要通过网络发送大文件,我必须使用
http
包中的MultipartRequest
,与MultipartFile
和它的构造函数-MultipartFile.fromBytes一起使用
var url = Uri.parse("YOUR_URL");
var request = new http.MultipartRequest("POST", url);
request.fields['some_additional_field'] = 'other_field';
request.files.add(new http.MultipartFile.fromBytes("file", bytes, filename:
file.name);
request.send().then((response) {
if (response.statusCode == 200) print("Uploaded!");
});
或者,您可以使用FormData只发送一个使用FormData的文件——例如,使用dart:html中的HttpRequest
void sendRequest(File file) {
FormData data = new FormData();
data.append('field', 'some_string');
data.appendBlob('file', file);
HttpRequest.request('YOUR_URL', method: "POST", sendData: data).then((req)
{
print(req.responseText);
});
}
谢谢你的回答。请注意,图像需要作为base64编码字符串发送。请问我有没有办法用第一种解决方案做到这一点?对于第二种解决方案,我发现很难导入FormData