您的位置:首页 > 理论基础 > 计算机网络

okhttp上传文件和携带参数

2016-12-01 17:17 344 查看
一个小工具类用来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\":\"上传文件失败\"}";
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: