颤振:- 在 API 中获取"PayloadTooLargeError: request entity too large"错误"MultipartRequest"?




我正在使用带有请求参数的图像上传MultipartRequest,但从我的以下代码行中得到以下异常。我使用了相同的 APIAndroid Native并且它在那里运行良好,但在 Flutter Android 平台中出现异常,请检查我从服务器收到的以下错误

请求实体太大

413

PayloadTooLargeError:请求实体太大 at readStream (/data/consagous/loyaltie/node_modules/raw-body/index.js:155:17( at getRawBody (/data/consagous/loyaltie/node_modules/raw-body/index.js:108:12( at read (/data/consagous/loyaltie/node_modules/body-parser/lib/read.js:77:3( at jsonParser (/data/consagous/loyaltie/node_modules/body-parser/lib/types/json.js:135:5( at Layer.handle [as handle_request] (/data/consagous/loyaltie/node_modules/express/lib/router/layer.js:95:5( at trim_prefix (/data/consagous/loyaltie/node_modules/express/lib/router/index.js:317:13( at/data/consagous/loyaltie/node_modules/express/lib/router/index.js:284:7 at Function.process_params (/data/consagous/loyaltie/node_modules/express/lib/router/index.js:335:12( at next (/data/consagous/loyaltie/node_modules/express/lib/router/index.js:275:10( at logger (/data/consagous/loyaltie/node_modules/morgan/index.js:144:5( at Layer.handle [as handle_request] (/data/consagous/loyaltie/node_modules/express/lib/router/layer.js:95:5( at trim_prefix (/data/consagous/loyaltie/node_modules/express/lib/router/index.js:317:13( at/data/consagous/loyaltie/node_modules/express/lib/router/index.js:284:7 at Function.process_params (/data/consagous/loyaltie/node_modules/express/lib/router/index.js:335:12( at next (/data/consagous/loyaltie/node_modules/express/lib/router/index.js:275:10( at expressInit (/data/consagous/loyaltie/node_modules/express/lib/middleware/init.js:40:5( at Layer.handle [as handle_request] (/data/consagous/loyaltie/node_modules/express/lib/router/layer.js:95:5( at trim_prefix (/data/consagous/loyaltie/node_modules/express/lib/router/index.js:317:13( at/data/consagous/loyaltie/node_modules/express/lib/router/index.js:284:7 at Function.process_params (/data/consagous/loyaltie/node_modules/express/lib/router/index.js:335:12( at next (/data/consagous/loyaltie/node_modules/express/lib/router/index.js:275:10( at query (/data/consagous/loyaltie/node_modules/express/lib/middleware/query.js:45:5( at Layer.handle [as handle_request] (/data/consagous/loyaltie/node_modules/express/lib/router/layer.js:95:5( at trim_prefix (/data/consagous/loyaltie/node_modules/express/lib/router/index.js:317:13( at/data/consagous/loyaltie/node_modules/express/lib/router/index.js:284:7 at Function.process_params (/data/consagous/loyaltie/node_modules/express/lib/router/index.js:335:12( at next (/data/consagous/loyaltie/node_modules/express/lib/router/index.js:275:10( at Function.handle (/data/consagous/loyaltie/node_modules/express/lib/router/index.js:174:3(

我使用以下代码行使用Multipart上传图像,如下所示,请检查一次。

Future<dynamic> apiUploadImage(
String url,
String eventType,
String name,
String email,
String password,
String mobile,
String _countryId,
String _stateId,
String _cityId,
String _zipCId,
String address,
var lati,
var longi,
String _categoryId,
File imageFile) async {
print("Current state = " + _stateId + " " + _cityId);
Uri uri = Uri.parse(url);
MultipartRequest request = new MultipartRequest('POST', uri);
request.headers[HEADER_CONTENT_TYPE_KEY] = HEADER_CONTENT_TYPE_VALUE;
request.headers[HEADER_VERSION_KEY] = HEADER_VERSION_VALUE;
request.headers[HEADER_DEVICE_TYPE_KEY] = HEADER_DEVICE_TYPE_VALUE;
request.headers[HEADER_DEVICE_ID_KEY] = HEADER_DEVICE_ID_VALUE;
request.headers[HEADER_AUTH_TOKEN_KEY] = HEADER_AUTH_TOKEN_VALUE;
request.headers[HEADER_TIME_KEY] = HEADER_TIME_VALUE;
request.fields['email'] = email;
request.fields['password'] = password;
request.fields['name'] = name;
request.fields['mobile'] = mobile;
request.fields['country'] = _countryId;
request.fields['state'] = _stateId;
request.fields['city'] = _cityId;
request.fields['zip_code'] = _zipCId;
request.fields['role_id'] = '3';
request.fields['device_type'] = HEADER_DEVICE_TYPE_VALUE;
request.fields['device_token'] = HEADER_AUTH_TOKEN_VALUE;
request.fields['category_id'] = _categoryId;
request.fields['address'] = address;
request.fields['lati'] = lati.toString();
request.fields['longi'] = longi.toString();
print("Current state = " + _stateId + " " + _cityId);
var stream =
new http.ByteStream(DelegatingStream.typed(imageFile.openRead()));
var length = await imageFile.length();
var multipartFile = new MultipartFile("imagefile", stream, length,
filename: imageFile.path);
request.files.add(multipartFile);
var response = await request.send();
final respStr = await response.stream.bytesToString();
debugPrint(respStr);
}

即使我在发送之前甚至压缩了图像文件,但问题是一样的,请检查我的压缩器代码以获取图像,如下所示。

imageFile = await ImagePicker.pickImage(source: ImageSource.camera,imageQuality: 85);

我已经搜索了解决方案,但它甚至不起作用,请检查一次。

1(. 第一个链接
2(.第二个链接
3(。第三个链接
4(。第四个链接

从服务器端来看,我们还增加了节点服务器的有效负载限制,如下所示,但它不起作用

bodyParser = { json: {limit: '50mb', extended: true}, urlencoded: {limit: '50mb', extended: true} };

我已经在服务器端和我这边尝试了所有方法,我已经参考了这个链接,但所有这些都对我不起作用。请检查我上面的代码,让我知道我错在哪里?谢谢

文件有一个命名的便利构造函数。像这样使用它:

request.files.add(
await http.MultipartFile.fromPath(
'some_form_value_name',
File('somefile.zip').path,
contentType: MediaType('application', 'zip'),
),
);

要发送测试数据,请使用其他命名构造函数(fromStringfromBytes(,例如:

request.files.add(http.MultipartFile.fromBytes(
'another_form_name',
Uint8List(1000),
filename: 'somefile.zip',
contentType: MediaType('application', 'zip'),
));

我已经使用了所有可能的方法来解决问题,但没有人为我工作,然后在我使用第三部分库之后dio 3.0.8并且工作得很好将图像与请求参数一起上传到服务器上。

pubspec.yaml里面使用了这个图书馆,

dio: ^3.0.8

在代码端,我使用了以下有效的代码。请检查一次。

Dio dio = new Dio(); // with default Options
// Set default configs
dio.options.baseUrl = BASE_URL;
dio.options.connectTimeout = 5000; //5s
dio.options.receiveTimeout = 3000;
FormData formData = new FormData.fromMap({
"email": email,
"password": password,
"name": name,
"mobile": mobile,
"country":_countryId,
"state": _stateId,
"city": _cityId,
"zip_code": _zipCId,
"role_id": "3",
"category_id":_categoryId,
"address": address,
"lati": lati.toString(),
"longi": longi.toString(),
"device_type": HEADER_DEVICE_TYPE_VALUE,

"profile_image": await MultipartFile.fromFile(imageFile.path,filename: imageFile.path.split("/").last),
});
var response = await dio.post(REGISTRATION_URL, data: formData);
if (response.statusCode == 200) {
apiResponse.onSuccess(response.toString(), eventType);
print("Image Uploaded");
} else {
apiResponse.onError('Failed to load post');
print("Upload Failed");
}
}

请查看此库以获取更多信息,请单击此处

相关内容

最新更新