gpt4 book ai didi

flutter dio 上传文件 [pdf/docs]

转载 作者:行者123 更新时间:2023-12-03 03:56:43 25 4
gpt4 key购买 nike

我正在尝试在我的 flutter 应用程序中使用 dio 包上传文件。我正在通过 formdata 发送我的文件。这是我的实现:

Future<FormData> formData1() async {
return FormData.fromMap({
"title": "from app2",
"description": "app upload test",
"files": [
for (var i = 0; i < pathNames.length; i++)
await MultipartFile.fromFile(pathNames[i],
filename: fileNames[i])
]
});
}

这是我发送文件的方式。

_sendToServer() async {
Dio dio = Dio(
BaseOptions(
contentType: 'multipart/form-data',
headers: {
"Authorization": "$token",
},
),
);
dio.interceptors.add(
LogInterceptor(requestBody: true, request: true, responseBody: true));
FormData formData = await formData1();
try {
var response = await dio.post("http://url/api/upload",
data: formData, onSendProgress: (int send, int total) {
print((send / total) * 100);
});
print(response);
} on DioError catch (e) {
if (e.response != null) {
print(e.response.data);
print(e.response.headers);
print(e.response.request);
} else {
print(e.request.headers);
print(e.message);
}
}
}

formdata 中的其他字段被发送到服务器,但不是 multipartfile。当我尝试从 postman 表单数据执行相同操作时,它会正确上传。我在这里做错了什么吗?

最佳答案

如果你想上传文件,你可以在调用 API 函数之前转换多部分数组,因为即使你在 form data dio 中放置 await 响应也不会等待 formdata 对象,或者您可以使用 MultipartFile.fromFileSync() 来摆脱等待。

让我用我的示例以简单的方式向您展示。试着去理解。

多部分转换

List multipartArray = [];
for (var i = 0; i < pathNames.length; i++){
multipartArray.add(MultipartFile.fromFileSync(pathNames[i], filename:
basename(pathNames[i])));
}

API 端

static Future<Response> createPostApi(multipartArray) async {
var uri = Uri.parse('http://your_base_url/post');
return await Dio()
.post('$uri',
data: FormData.fromMap({
"title": "from app2",
"description": "app upload test",
"files": multipartArray
}))
.catchError((e) {
print(e.response.data);
print(e.response.headers);
print(e.response.request);
});
}

关于flutter dio 上传文件 [pdf/docs],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60594063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com