CERTIFICATE_VERIFY_FAILED:无法在MultipartFile中获取本地颁发者证书

时间:2020-09-18 12:16:24

标签: flutter

HandshakeException:客户端中的握手错误(操作系统错误: CERTIFICATE_VERIFY_FAILED:无法获取本地发行者证书(handshake.cc:354))

在上传文件和字段时获取HandshakeException

const TestMode = true;

addAssets(Map formFields, List files) async {
    Map resp = {
        'Status' : false,
        'Msg' : "Unable to add asset"
    };
    try {
        Uri url = Uri.parse("$BaseUrl$AddAssetUrl");
        http.MultipartRequest multi = http.MultipartRequest("POST", url);
        formFields.forEach((key, val) {
            multi.fields[key] = val;
        });

        for (var val in files) {
            var myFile = await http.MultipartFile.fromPath('MediaFiles[]', val);
            multi.files.add(
                myFile,
            );
        }

        http.StreamedResponse streamedResponse = await multi.send().then((response) async {
            return response;
        });
        String body = await streamedResponse.stream.bytesToString();
        if(streamedResponse.statusCode == 200 && isJSON(body)){
            Map data = json.decode(body);
            resp['Status'] = data['Status'];
            resp['Msg'] = data['Msg'];
        }
        debugPrint(body);

    } catch (e) {
        if(TestMode) print(e.toString());
    }
    return resp;
}

使用 MultipartFile

上传文件

TestMode不变

http是程序包:http / http的别名。

1 个答案:

答案 0 :(得分:0)

参考:Github 只需通过IOClient发送您的请求 例如:

    addAssets(Map formFields, List files) async {
        Map resp = {
            'Status' : false,
            'Msg' : "Unable to add asset"
        };
        try {
            Uri url = Uri.parse("$BaseUrl$AddAssetUrl");
            http.MultipartRequest multi = http.MultipartRequest("POST", url);

            formFields.forEach((key, val) {
                multi.fields[key] = val;
            });

            for (var val in files) {
                var myFile = await http.MultipartFile.fromPath('MediaFiles[]', val);
                multi.files.add(
                    myFile,
                );
            }
            HttpClient httpClient = HttpClient();
            httpClient .badCertificateCallback = (X509Certificate cert,String host,int port) {
              return getBaseUrl() == host;
            };
            http.StreamedResponse streamedResponse = await IOClient(
                 httpClient
            ).send(multi);

            String body = await streamedResponse.stream.bytesToString();
            if(streamedResponse.statusCode == 200 && isJSON(body)){
                Map data = json.decode(body);
                resp['Status'] = data['Status'];
                resp['Msg'] = data['Msg'];
            }
            debugPrint(body);

        } catch (e) {
            if(TestMode) print(e.toString());
        }
        return resp;
    }

String getBaseUrl(){
    String url = 'https://hostname.com/api_dir/'; // Your api url
    url = url.substring(url.indexOf('://')+3);
    return url.substring(0,url.indexOf('/'));
}