okhttp上传文件和携带参数

本文介绍了一个Java工具类,用于实现HTTPS环境下文件上传及POST JSON数据的功能,并且能够处理参数传递及忽略证书验证等问题。

一个小工具类用来post json字符串和文件上传并且带参数外加忽略https证书认证

1 上传文件和参数

public class NetWorkUtilsHttps {
    public static final MediaType JSON = MediaType
            .parse("application/json; charset=utf-8");
    private OkHttpClient client;
    private SSLContext sslContext = null;

    public NetWorkUtilsHttps() {
        X509TrustManager xtm = new X509TrustManager() {
            @Override
            public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {

            }

            @Override
            public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {

            }

            @Override
            public X509Certificate[] getAcceptedIssuers() {
                return new X509Certificate[0];
            }
        };
        try {
            sslContext = SSLContext.getInstance("SSL");
            sslContext.init(null, new TrustManager[]{xtm}, new SecureRandom());
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        }
        HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
            @Override
            public boolean verify(String hostname, SSLSession session) {
                return true;
            }
        };
        client = new OkHttpClient.Builder()
                .sslSocketFactory(sslContext.getSocketFactory())
                .readTimeout(50, TimeUnit.SECONDS)
                .connectTimeout(50, TimeUnit.SECONDS)
                .hostnameVerifier(DO_NOT_VERIFY)
                .build();
    }

//post  json  
  .addHeader("code", trsCode)
是加头部的一些参数
public String post(String json, String code, String url) { RequestBody body = RequestBody.create(JSON, json); Request request = new Request.Builder() .url(url) .addHeader("code", trsCode).post(body).build(); try { Response response = client.newCall(request).execute(); if (response.isSuccessful()) { return response.body().string(); } response.body().close(); } catch (IOException e) { e.printStackTrace(); } return "{\"ROOT\":{\"BODY\":{\"info\":[]},\"HEAD\":{\"resCode\":\"545\",\"TrsAppType\":\"1\",\"resMsg\":\"连接服务器失败,请稍后重试!\"}}}"; } public String uploadFile(File file, String uniqueNo, String fileCode, String path) { StringBuffer resultBuffer = new StringBuffer(""); Map<String, String> params = new HashMap<>(); params.put("busiType", "0");//业务类型 params.put("flag", "up");// 操作标志:up-上传 down-下载 params.put("fileType", fileCode);//文件所属类型 code码 参数 MultipartBody.Builder form = new MultipartBody.Builder().setType(MultipartBody.FORM); StringBuffer buffer = new StringBuffer(); String url = path; url += "?"; for (String key : params.keySet()) { //添加参数 buffer.append(key + "=" + params.get(key) + "&"); Log.e(key, params.get(key)); } url += buffer.toString(); if (url.lastIndexOf("&") != -1) { url = url.substring(0, url.lastIndexOf("&"));//拼接参数 }
//放文件
        form.addPart(Headers.of("Content-Disposition", "form-data; name=\"file\";filename=\"" + file.getName() + "\""), RequestBody.create(MediaType.parse("image/png"), file));
        RequestBody body = form.build();
        Request request = new Request
                .Builder()
                .url(url)
                .addHeader("Connection", "keepAlive")
                .addHeader("Charset", "UTF-8")
                .post(body)
                .build();
        try {
            Response response = client.newCall(request).execute();
            if (response.isSuccessful()) {
                resultBuffer.replace(0, resultBuffer.length(), response.body().string());
                Log.e("upFileFlag", resultBuffer.toString());
                return resultBuffer.toString();
            } else {
                Log.e("error", response.body().string());
            }
            response.body().close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "{\"resCode\":\"099\",\"resMsg\":\"上传文件失败\"}";
    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值