我正在使用dio: ^3.0.4。任何人请帮我找到添加标题的解决方案。这是我的代码:
FormData formData =
new FormData.fromMap({"files": await MultipartFile.fromFile(filePath.path, filename: 'photo')
});
Run Code Online (Sandbox Code Playgroud)
Response response = await dio.post("***********",
data: formData,
onSendProgress: (int sent, int total) {
print("$sent $total");
},
options: Options(
headers: {
"authorization": "*************"
},
followRedirects: false,
validateStatus: (status) {
return status <= 500;
}
),
);
Run Code Online (Sandbox Code Playgroud)
当我打印标题时。
打印(响应。标题);
结果:
颤振:内容类型:文本/html;charset=UTF-8 连接:关闭缓存控制:无缓存,私有传输编码:分块日期:2019 年 11 月 7 日星期四 14:29:02 GMT 服务器:Apache/2.4.18
我想使用 Package DIO Package将一些图像上传到 rest-api ,我是这个包的新手(我将此包仅用于 CRUD 操作),并且在上传图像操作时遇到问题。
我已经在阅读文档,但没有看到上传图片。我正在尝试此代码(参考文档)并遇到一些错误:
error:FileSystemException
message :"Cannot retrieve length of file"
OSError (OS Error: No such file or directory, errno = 2)
"File: '/storage/emulated/0/Android/data/com.example.mosque/files/Pictures/scaled_IMG_20190815_183541.jpg'"
Type (FileSystemException)
message:FileSystemException: Cannot retrieve length of file, path = 'File: '/storage/emulated/0/Android/data/com.example.mosque/files/Pictures/scaled_IMG_20190815_183541.jpg'' (OS Error: No such file or directory, errno = 2)
DioErrorType (DioErrorType.DEFAULT)
name:"DioErrorType.DEFAULT"
Run Code Online (Sandbox Code Playgroud)
Future uploadImage({dynamic data,Options options}) async{
Response apiRespon = await dio.post('$baseURL/mahasiswa/upload/',data: data,options: options);
if(apiRespon.statusCode== 201){
return apiRespon.statusCode==201;
}else{
print('errr');
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
我有以下代码来上传文件。
var client = new dio.Dio();
await client.put(
url,
data: formData,
options: dio.Options(
headers: headers,
),
onSendProgress: (int sent, int total) {
final progress = sent / total;
print('progress: $progress ($sent/$total)');
},
);
Run Code Online (Sandbox Code Playgroud)
上传文件工作正常。问题是,我有一个视图,它有一个圆形进度条,指示onSendProgress触发时的上传进度。当我上传一个 ~10MB 的文件时,进度条会在一秒钟内从 0% 跳到 100%,然后在继续执行其余代码之前等待几秒钟(取决于文件大小)。这对我来说似乎很奇怪,因为我希望进度条会逐渐增加进度。
您可以在下面找到我的示例中的打印输出,其中包含一个 ~10MB 的文件。
flutter: progress: 0.000003035281907563734 (29/9554302)
flutter: progress: 0.000013187776563897604 (126/9554302)
flutter: progress: 0.999996546058519 (9554269/9554302)
flutter: progress: 0.9999967553883057 (9554271/9554302)
flutter: progress: 1.0 (9554302/9554302)
Run Code Online (Sandbox Code Playgroud)
这是一个较小的文件,但具有相同数量的回调。
flutter: progress: 0.00001847214941293598 (29/1569931)
flutter: progress: 0.00008025830434585978 (126/1569931)
flutter: progress: 0.9999789799679094 (1569898/1569931)
flutter: progress: 0.9999802539092483 …Run Code Online (Sandbox Code Playgroud) 您好,我正在使用 Dio 发送 FormData,但是发送时,网站返回错误
var formData = FormData.fromMap({
"ctl00\$ScriptManager1": "ctl00\$UpdatePanel1",
"__EVENTTARGET" :"ctl00\$cphPage\$productsControl",
"__EVENTARGUMENT" : "",
"__LASTFOCUS" : "",
"PageLoadedHiddenTxtBox" : "Set",
"Language" : "es-MX",
"CurrentLanguage" : "es-MX",
"Currency" : "",
"__VIEWSTATE" :"/sadasd.....",
"__VIEWSTATEGENERATOR" : "C0E71A90",
"ctl00\$txtSearch" : "",
"ctl00\$cphPage\$productsControl\$TopTools\$cbxSortType" : "",
"ctl00\$cphPage\$productsControl\$TopTools\$cbxPageSize" : "-1",
"ctl00\$taxes\$listCountries" : "54",
"__ASYNCPOST" : "true",
" " : ""
});
var dio = Dio();
dio.interceptors.add(InterceptorsWrapper(onRequest: (RequestOptions options) async {
var customHeaders = {
'content-type': 'text/html; charset=utf-8',
'application':'x-www-form-urlencoded',
'Cookie': 'uid=rBQBc2CisZdxWU5XBBmMAg==; ASP.NET_SessionId=tedc4xrih1hk1ykbdzlakuvb; ASPNET_Session=client=BLUR; ShopMSAuth=0102A9A3B88FC919D908FEA90B7DF1D119D908000442004C005500520000012F00FF'
// other headers …Run Code Online (Sandbox Code Playgroud) 我正在使用新的 dart 版本 >=2.12.0 <3.0.0 并启用空安全。
我已经添加了我的代码以供参考。
import 'package:cric_app/AppUrls.dart';
import 'package:cric_app/features/home/match_model.dart';
import 'package:dio/dio.dart';
import 'package:rxdart/rxdart.dart';
class MatchesService {
// ignore: close_sinks
BehaviorSubject<List<MatchModel>> list = BehaviorSubject<List<MatchModel>>();
Future<List<MatchModel>> getMatches() async {
try {
var matchList = await fetchMatches();
list.add(matchList);
return matchList;
} catch (Exc) {
print(Exc);
}
}
Future<List<MatchModel>> fetchMatches() async {
var dio = Dio();
final response = await dio.post(AppUrls.getMatches);
print(response.data);
final body = response.data['matches'] as List;
return body.map((dynamic json) {
return MatchModel(
id: json['id'] as int,
date: json['date'] as …Run Code Online (Sandbox Code Playgroud) 我正在使用 Flutter DIO 库。它在我的 Android 应用程序上运行良好,但在 Web 上出现错误。
Error: DioError [DioErrorType.response]: XMLHttpRequest error.
如果我尝试使用 http 相同的 url,它在 Web 上工作正常。我的 Dio 库代码
Dio dio = Dio();
dio.options.method = "POST";
dio.options.headers["Access-Control-Allow-Origin"] = "*";
dio.options.headers["Access-Control-Allow-Credentials"] = true;
dio.options.headers["Access-Control-Allow-Headers"] =
"Origin,Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token,locale";
dio.options.headers["Access-Control-Allow-Methods"] =
"GET, HEAD, POST, OPTIONS";
var response = await dio
.post('http://45.79.124.182/app_php/PagarGuru_test/requestAdd.php');
Run Code Online (Sandbox Code Playgroud)
错误日志
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart 908:28 get current
packages/dio/src/dio_mixin.dart 819:20 assureDioError
packages/dio/src/dio_mixin.dart 678:13 _dispatchRequest
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 60:31 <fn>
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/zone.dart 1692:54 runBinary
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 175:22 handleError
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 779:46 handleError
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 800:13 _propagateToListeners
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 610:5 [_completeError]
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 666:7 …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Dio 拦截器实现访问令牌刷新。我查看了我能找到的示例,但似乎都不起作用。
这是我的尝试:
class AuthInterceptor extends QueuedInterceptor {
final Dio dio;
final AuthService authService;
AuthInterceptor(this.dio, this.authService);
@override
void onRequest(
RequestOptions options, RequestInterceptorHandler handler) async {
var accessToken = await TokenRepository.getAccessToken();
if (accessToken != null) {
logDebug('Access-Token: $accessToken');
options.headers['Authorization'] = 'Bearer $accessToken';
}
return handler.next(options);
}
@override
void onError(DioError err, ErrorInterceptorHandler handler) async {
if (err.type == DioErrorType.response && err.response?.statusCode == 401) {
var accessToken = await TokenRepository.getAccessToken();
if (accessToken != null) {
final refreshToken = await TokenRepository.getRefreshToken();
final refreshResult …Run Code Online (Sandbox Code Playgroud) 使用 http 包,我可以通过将二进制数据放入 post 调用的正文中来将图像发送到服务器,如以下代码片段所示:
var response = await http.post('My_url', body: File(path).readAsBytesSync(), headers: {
'apikey': 'myAPIKEY',
'Content-Type': 'image/*', // set content-length
});
Run Code Online (Sandbox Code Playgroud)
我不能使用 Dio 做同样的事情,我不知道如何直接将二进制数据放入正文中(就像我可以用邮递员做的那样)
从今天起,每当我尝试登录我的应用程序时,我都会收到 Dio 包抛出的以下错误:SocketException: Insecure socket connections are disallowed by platform: 10.0.2.2
我使用以下设置进行连接:
static BaseOptions options = new BaseOptions(
baseUrl: "http://10.0.2.2:3000", // on android emulator
connectTimeout: 5000,
receiveTimeout: 3000)
Run Code Online (Sandbox Code Playgroud)
因此,类似于(我在 /user/login 处设置了身份验证并正常运行):
var apiLogin = api.dio;
try {
Response response = await apiLogin.post("/user/login",
options: Options(contentType: "application/json"),
data: {"email": email, "password": password});
} on DioError catch (e) {
throw Exception([e]);
}
Run Code Online (Sandbox Code Playgroud)
我有一个在端口 3000 上运行的节点服务器,它连接到(容器化的)mongodb。尝试身份验证时,它立即出现 DioError,我无法在网上的任何地方找到原因。
有谁知道这个错误与什么有关?
编辑[答案]
感谢@lyrics为我指明了正确的方向:从 API 级别 27 及更高级别开始,usesCleartextTraffic 默认为 false,因此阻止传出的 http 请求,需要 HTTPS。
解决方案是将以下内容添加到 AndroidManifest.xml: …
我已经在 CIFAR10 数据集上训练了一个 CNN(占位符,稍后将替换为不同的模型)并将模型集成到烧瓶 API 中。API 托管在 Heroku 上,我现在想使用 Flutter / Dart 在我的手机上拍照,将它们发送到 Flask API,在它们上运行我的训练模型并返回预测。
使用 python,我可以轻松地向我的 API 发出发布请求并返回预测。这是我的简单python代码:
import requests
import json
img = open('some-picture.jpg', 'rb')
files = {'image': img}
response = requests.post("url_to_api", files=files)
print(response.text)
Run Code Online (Sandbox Code Playgroud)
我使用 Flutter / Dart 的时间并不长,我认为发出 htpp 请求的过程比在 python 中复杂一些。有人能给我一些指示或代码,让我可以用我的相机拍照,将它上传到我的 API,并将响应存储在一个变量中吗?这是我的烧瓶 API 的(简化的)python 代码:
from flask import Flask, request
import os
import numpy as np
from PIL import Image
from tensorflow import keras
app = Flask(__name__)
app.config["DEBUG"] = True
model = keras.models.load_model('cifar10_cnn.h5')
labels = ["Airplane", …Run Code Online (Sandbox Code Playgroud) dio ×10
flutter ×10
dart ×4
api ×2
file-upload ×1
flutter-http ×1
http ×1
http-post ×1
post ×1
rxdart ×1