Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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
Dart 如何向http post发送多个文件_Dart_Flutter - Fatal编程技术网

Dart 如何向http post发送多个文件

Dart 如何向http post发送多个文件,dart,flutter,Dart,Flutter,我想向http post发送两个文件 卷曲看起来像这样 curl -X POST "https://api-us.faceplusplus.com/facepp/v3/compare" \ -F "api_key=<api_key>" \ -F "api_secret=<api_secret>" \ -F "image_file1 =file1" \ -F "image_file1 =file2" 但它返回了这个 NoSuchMethodError:类“String”没

我想向http post发送两个文件

卷曲看起来像这样

curl -X POST "https://api-us.faceplusplus.com/facepp/v3/compare" \
-F "api_key=<api_key>" \
-F "api_secret=<api_secret>" \
-F "image_file1 =file1" \
-F "image_file1 =file2"
但它返回了这个

NoSuchMethodError:类“String”没有实例获取程序“path”


如何正确发送这些文件?

它看起来不像第一个和第二个文件实际上是
文件。当它们确实是文件时,如下面的示例中所示,我得到401(正如预期的那样,因为我有一个伪api密钥)

导入'dart:io';
将“package:http/http.dart”导入为http;
导入“package:path/path.dart”;
班岗{
字符串标题=“”;
字符串描述=“”;
列表文件=[];
Future sendFiles()异步{
试一试{
var uri=uri.parse('https://example.com/api-endpoint');
var request=http.MultipartRequest('POST',uri);
//标题
request.headers.addAll({
“接受”:“应用程序/json”,
“授权”:“持票人$token”,
});
//田地
请求。字段['title']=标题;
请求.字段['description']=说明;
//档案
等待未来(
文件夹,
(文件)异步=>{
request.files.add(
http.MultipartFile(
“文件”,
(http.ByteStream(file.openRead()).cast(),
等待file.length(),
filename:basename(file.path),
),
)
},
);
return wait request.send();
}捕捉(错误){
打印(错误);
返回null;
}
}
}

@jay最好把这当作你自己的问题来问question@MoVod很抱歉,我应该删除它。@RichardHeap非常感谢。请不要只发布代码作为答案,还要解释代码的作用以及它如何解决问题。带有解释的答案通常更有帮助,质量更好,更容易吸引选票
   File first;
   File second;
      var uri = Uri.parse('https://api-us.faceplusplus.com/facepp/v3/compare');
      var request = new http.MultipartRequest("POST", uri);
       request.fields['api_key'] = apiKey;
       request.fields['api_secret'] = apiSecret;
       request.files.add(await http.MultipartFile.fromPath('image_file1', first.path, contentType: new MediaType('application', 'x-tar')));
       request.files.add(await http.MultipartFile.fromPath('image_file2', second.path, contentType: new MediaType('application', 'x-tar')));
       var response = await request.send();
       print(response);
main() async {
  File first = File('pubspec.yaml');
  File second = File('analysis_options.yaml');
  Uri uri = Uri.parse('https://api-us.faceplusplus.com/facepp/v3/compare');
  http.MultipartRequest request = new http.MultipartRequest('POST', uri);
  request.fields['api_key'] = 'apiKey';
  request.fields['api_secret'] = 'apiSecret';
  request.files.add(await http.MultipartFile.fromPath('image_file1', first.path,
      contentType: new MediaType('application', 'x-tar')));
  request.files.add(await http.MultipartFile.fromPath(
      'image_file2', second.path,
      contentType: new MediaType('application', 'x-tar')));
  http.StreamedResponse response = await request.send();
  print(response.statusCode);
}
import 'dart:io';
import 'package:http/http.dart' as http;
import 'package:path/path.dart';

class Post {
  String title = '';
  String description = '';
  List<File> files = [];

  Future<http.StreamedResponse> sendFiles() async {
    try {
      var uri = Uri.parse('https://example.com/api-endpoint');
      var request = http.MultipartRequest('POST', uri);

      // Headers
      request.headers.addAll({
        'Accept': 'application/json',
        'Authorization': 'Bearer $token',
      });

      // Fields
      request.fields['title'] = title;
      request.fields['description'] = description;

      // Files
      await Future.forEach(
        files,
        (file) async => {
          request.files.add(
            http.MultipartFile(
              'files',
              (http.ByteStream(file.openRead())).cast(),
              await file.length(),
              filename: basename(file.path),
            ),
          )
        },
      );

      return await request.send();
    } catch (err) {
      print(err);

      return null;
    }
  }
}