Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 无法使用dio post请求上载图像_Flutter_Dio - Fatal编程技术网

Flutter 无法使用dio post请求上载图像

Flutter 无法使用dio post请求上载图像,flutter,dio,Flutter,Dio,我正在尝试将带有标题的照片上载到RESTAPI。但由于这是我第一次,我得到了一些例外。我上传图像的代码如下所示: Dio dio = new Dio(); dio.options.headers['content-Type'] = 'multipart/form-data'; dio.options.headers['Authorization'] = 'Token ${box.get('token')}'; FormData formData = For

我正在尝试将带有标题的照片上载到RESTAPI。但由于这是我第一次,我得到了一些例外。我上传图像的代码如下所示:

Dio dio = new Dio();

      dio.options.headers['content-Type'] = 'multipart/form-data';
      dio.options.headers['Authorization'] = 'Token ${box.get('token')}';

      FormData formData = FormData.fromMap({
        "author": box.get('user_id'),
        "description": _caption,
        "image": MultipartFile.fromFileSync(_image.path,
            filename: _image.path.split(Platform.pathSeparator).last)
      });

      dio
          .post("$baseURL/posts/create/",
              data: formData,
              options:
                  Options(method: 'POST', responseType: ResponseType.plain))
          .then((response) => print(response))
          .catchError((error) => print(error));
在我的设备上运行此程序并尝试上载图像后,它会将我引导到dio.dart包行
抛出错误(e,选项)

如果你有任何使用dio上传图片的知识,请帮助解决它

更新:json正文

{
    "author": null,
    "description": "",
    "image": null
}
更新:我尝试使用另一个服务上载图像(不是dio)

//字符串到uri
var uri=uri.parse($baseURL/posts/create/);
//创建多部分请求
var-request=http.MultipartRequest(“POST”,uri);
//添加带有Auth令牌的头
映射头={
“授权”:“令牌${box.get('Token')}”,
“内容类型”:“多部分/表单数据”
};
request.headers.addAll(headers);
//添加字段
映射字段={
“author”:box.get('user_id').toString(),
“说明”:,
};
request.fields.addAll(字段);
//接受文件的多部分
var multipartFile=http.multipartFile(
“文件”,
_image.readAsBytes().asStream(),
_image.lengthSync(),
文件名:_image.path.split('/')。最后,
contentType:MediaType('image','jpeg'),
);
//将文件添加到多部分
request.files.add(多部分文件);
打印(request.toString());
//发送
var response=wait request.send();
打印(响应状态码);
//倾听回应
response.stream.transform(utf8.decoder).listen((值){
印刷品(价值);
});
我也尝试过用上面的代码上传图片。但这会返回一个错误,显示“image”:[“未提交任何文件”。]

您可以尝试以下操作:

import 'package:dio/dio.dart';

     FormData data = FormData.fromMap({
          "image": await MultipartFile.fromFile(_image.path,
              filename: fileName, contentType: MediaType("image", "jpeg")),
          "author": box.get('user_id'),
          "description": _caption,
        });
        Dio dio = Dio();
    
        Response response = await dio
            .post("$baseURL/posts/create/",
            data: data,
            options: Options(
              headers: {
                'Authorization':'Token ${box.get('token')}',
              },
            ), onSendProgress: (int sent, int total) {
              debugPrint(
                  "sent : ${sent.toString()}" + " total : ${total.toString()}");
            })
            .whenComplete(() => {debugPrint("complete:")})
            .catchError((onError) {
          debugPrint("error:${onError.toString()}");
        });

可以添加json的主体吗?我将其添加到上述代码中。这就是你的意思吗?是的,没错。我的问题是给你的。是否有其他服务用于上载文件并返回下载链接?或者没有。是的,我也尝试过使用该代码,但它给了我错误
“image”:[“未提交任何文件”。]
。你可以检查上面的代码。不,这不是我的意思,那么数据库中的数据类型图像是什么?这不起作用。这给了我一个我一开始就得到的例外<代码>抛出错误(e,选项)嗯,您的问题不在代码中,请确保后端的接收是正确的。我建议您在添加dataWell时分开上传,我的后端开发人员说他没有任何问题)。我想我得自己想办法了
import 'package:dio/dio.dart';

     FormData data = FormData.fromMap({
          "image": await MultipartFile.fromFile(_image.path,
              filename: fileName, contentType: MediaType("image", "jpeg")),
          "author": box.get('user_id'),
          "description": _caption,
        });
        Dio dio = Dio();
    
        Response response = await dio
            .post("$baseURL/posts/create/",
            data: data,
            options: Options(
              headers: {
                'Authorization':'Token ${box.get('token')}',
              },
            ), onSendProgress: (int sent, int total) {
              debugPrint(
                  "sent : ${sent.toString()}" + " total : ${total.toString()}");
            })
            .whenComplete(() => {debugPrint("complete:")})
            .catchError((onError) {
          debugPrint("error:${onError.toString()}");
        });