مشکل ارسال اطلاعات از سمت اپلیکیشنی بود که با فلاتر نوشته میشوند به سمت سروری که با استفاده از زبان golang آماده شده بود
ارسال اطلاعات از سمت فلاتر به سمت سرور با استفاده از پروتکلhttp ارسال می شود مطلبی که مهم بود در سمت golang ما با استفاده از پکیج echo اطلاعات را دریافت می کردیم و به سمت متدهای دیگر ارسال می کنیم تا یا بانک اطلاعاتی ذخیره شود و یا یا اعتبار سنجی و روی اطلاعات محاسبات خاصی انجام گیرد،
echo اطلاعات را به چند صورت دریافت می کند که دو روش از انها برای برای این پروژه کار امد ر بود، استفاده ازqueryparams و استفاده از formvalue
در queryparams اطلاعات از طریق url به سمت سرور ارسال میشود و سرور اطلاعات url دریافتی خوانده و به سمت متدهای بعدی ارجاع داده میشود
مشکلی که من با این روش داشتم این بود که در صورتی که در یک زمان اطلاعات چند فیلد مثلا بیست فیلد به سمت سرور ارسال شود url ما طولانی خواهد بود
روشی که تاکید داشتم انجام گیرد ارسال اطلاعا ت به صورت model , و دریافت انها با استفاده از formvalue ها بود
در formvalue ها اطلاعات با استفاده از قسمت body متد http به سمت سرور ارسال شود و اطلاعات سمت سرور در قسمت body در request قابل دیدن و دریافت هستند
برای ارسال از طریق formvalue من به دوصورت انجام دادم که هر دو حالت را در اینجا مینویسم
در هر دو حالت سمت سرور یا این کد بود
unc create(c echo.Context) error {
var (
user = models.User{}
)
usermobile := c.FormValue("mobile")
user.Mobile = usermobile
}
حالت اول از سمت فلاتر به عنوان کلاینت
Future<CompanyName> createCm(String cmName) async {
String ur = 'http://192.168.1.38:8080/api/v1/user/signin';
var map = Map<String, dynamic>();
map['mobile'] = cmName;
final response = await http.post(
Uri.parse(ur),
headers: <String, String>{
'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',
},
//body: jsonEncode(<dynamic, String>{'mobile': cmName}),
body: map,
);
if (response.statusCode == 200 || response.statusCode == 201) {
return CompanyName.fromJson(jsonDecode(response.body));
} else {
throw Exception('faild to create .');
}
}
دو مطلب برای من زمان بر شد
۱- در header
'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',
استفاده شود و در قسمت body همانطور که میبینید به جای
body: jsonEncode(<dynamic, String>{'mobile': cmName}),
از
body: map,
استفاده شود
در حالت دوم که میتوان با آن فایلها را نیز راسال کرد
var uri = Uri.parse('http://192.168.1.38:8080/api/v1/user/signin');
var req = http.MultipartRequest('POST', uri)..fields['mobile'] = cmName;
var response = await req.send();
final respStr = await response.stream.bytesToString();
return jsonDecode(respStr);
if (response.statusCode == 200 || response.statusCode == 201) {
print('sended');
}
امیدوارن به کارتان بیاید
رفرنسها