【发布时间】:2020-05-13 18:41:36
【问题描述】:
我正在尝试将用户模型从 dart 发送到我的文件在我的 c# 后端中设置为“IFormFile”数据类型的 api。 我尝试使用多部分请求,但得到的只是错误说明,我不明白为什么它无法检索文件的长度。
这是我的代码:
updateUser() async {
var uri = Uri.parse('http://myIP:8070/api/Users');
var request = http.MultipartRequest('Put', uri);
request.fields['id']="07bb2a17-7cd5-471b-973a-4b77d239b6c3";
request.fields['username']="beeso";
request.fields['email']="jake-username2@gmail.com";
request.fields['password']="Jake123-";
request.fields["oldPassword"]="Jake124-";
request.fields["gender"]="Male";
request.fields["dateOfBirth"]=DateTime.now().toString();
request.fields["name"]="dsjnss";
request.fields["languages"]=["Language1","Language2"].toString();
request.fields["nationalities"]=["Nationality1","Nationality2"].toString();
request.fields["phoneNumber"]="70502030";
request.fields["biography"]="jdnknkdas";
request.fields["info"]="asndasnkdas";
request.fields["religion"]="Christian";
request.fields["location"]="LA";
File imageFile = new File('Anatomy_of_a_Sunset-2.jpg');
var stream = new http.ByteStream(DelegatingStream.typed(imageFile.openRead()));
var length = await imageFile.length();
var multipartFile = new http.MultipartFile('file', stream, length,
filename: basename(imageFile.path));
request.files.add(multipartFile);
Map<String, String> headers = {
"content-type": "application/json"
};
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
print(response.statusCode);
}
任何帮助将不胜感激。
【问题讨论】:
-
1 - 您的内容类型不是 JSON,(它是多部分的),因此请省略该标头。 2 - MultipartFile 的另一个名称构造函数在期望文件时更好 - 它会为您节省两三行。 3 - 错误消息告诉您“解剖学...”文件不存在。它必须在不同的文件夹中或称为不同的名称。它在哪里?
-
好吧,我现在把它改成了 "content-type": "multipart/form-data",Anatomy 文件和 pubspec.yaml 在同一个目录下(在它旁边),关于构造函数我尝试了很多,很多都给出了我不知道如何解决的错误,这就是我坚持下去的原因。 @RichardHeap
-
这是一个飞镖应用吗?还是颤振应用?如果是后者,您可以访问这样的文件。您需要将其移动到资产并加载它。因为在纯 dart 应用程序中测试它更容易,所以创建一个新项目。如果您还没有,请下载 dart SDK (2.7.1) 并将您的 ide 的 dart 插件指向它。
-
这是一个颤振应用程序,我在帖子中添加了一个链接以查看文件所在的位置。我之前也尝试过添加屏幕截图中显示的资产文件夹并添加文件而不是它。之后我从 pubspec.yaml 文件中加载它并将其作为 new File('assets/Anatomy_of_a_Sunset-2.jpg');但仍然是同样的错误。 @RichardHeap
标签: c# asp.net flutter dart multipart