上周在做项目的时候遇到了表单上传图片的问题,以前的项目中上传图片有用到通过base64转成String类型上传的,
用表单上传的方式还没遇到过。然后就去网上百度了一番,找到了一个比较好的方法,给记录下来。
转载至:https://blog.csdn.net/android_freshman/article/details/51910937
然后接着我们遇到的第二个问题,现在很多都采用https的方式,所以也要解决一下证书的问题。
转载至:https://blog.csdn.net/u012045061/article/details/50218393
下面就给我综合他们两位的方法写好的一个工具。
public class OkHttp3opstImage { public static OkHttpClient mClient; private static String mImageType = "multipart/form-data"; /** * 如果需要上传其他参数自己添加设置 * @param file 上传的文件路径 * @param dr 回调接口 */ public static void PostImage(File file, DataResponce dr){ if (mClient == null){ mClient = getUnsafeOkHttpClient(); } RequestBody fileBody = RequestBody.create(MediaType.parse("image/png"), file); RequestBody requestBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) //可以根据自己的接口需求在这里添加上传的参数 .addFormDataPart("file", "自己本地图片的名字", fileBody) .addFormDataPart("imagetype", mImageType) .build(); Request request = new Request.Builder() .url("你的上传接口") .post(requestBody) .build(); Response response; try { response = mClient.newCall(request).execute(); String jsonString = response.body().string(); if (!response.isSuccessful()) { dr.onFail("上传失败"); Log.d("info", "======上传失败===" + response.toString()); } else { JSONObject jsonObject = new JSONObject(jsonString); int status = jsonObject.getInt("status"); if (status == 0) { dr.onSucc(jsonObject.getString("msg")); Log.i("info","======上传成功===="); } } } catch (IOException e) { Log.d("info", "======上传异常====", e); dr.onFail(e.toString()); } catch (JSONException e) { dr.onFail(e.toString()); Log.d("info", "======上传异常====", e); } } //忽略证书验证 private static OkHttpClient getUnsafeOkHttpClient() { try { final TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { @Override public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) { } @Override public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) { } @Override public java.security.cert.X509Certificate[] getAcceptedIssuers() { return new java.security.cert.X509Certificate[]{}; } } }; final SSLContext sslContext = SSLContext.getInstance("SSL"); sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); final javax.net.ssl.SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory(); OkHttpClient.Builder builder = new OkHttpClient.Builder() .connectTimeout(3, TimeUnit.MINUTES) .writeTimeout(1,TimeUnit.MINUTES) .readTimeout(1,TimeUnit.MINUTES) .sslSocketFactory(sslSocketFactory) .hostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession session) { return true; } }); OkHttpClient okHttpClient = builder.build(); return okHttpClient; } catch (Exception e) { throw new RuntimeException(e); } } }