我这样做:
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);
}
我注意到,后端收到的base64Img
的长度小于应用程序中生成的长度。当我致电base64Img.length
时,我得到 129648 ,但在服务器上,我得到 66401 。请注意,该文件实际上是一个图像。因此,当我从服务器解码一个时,图像的下半部分不会以某种方式显示或失真。
我也在原生Android中发送相同的数据,并且没有任何问题。
所以我的问题是,dart是否对请求正文数据的值有最大长度限制以及如何发送大数据?
答案 0 :(得分:2)
要通过网络发送大型文件,我必须使用MultipartRequest
包中的http
,以及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的HttpRequest:html
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);
});
}