okhttp3 表单上传文件

本文介绍如何在Java项目中使用OkHttp3库进行文件上传,包括在Maven项目中添加依赖,处理中文乱码及跳过SSL验证,通过示例代码详细展示了上传过程。

1、maven的pom.xml文件中添加okhttp3的依赖:

        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>3.6.0</version>
        </dependency>

2、java代码:

 这里主要注意中文乱码问题的处理以及跳过ssl认证问题的处理

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.concurrent.TimeUnit;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class UploadUtils {
	
	public static void uploadFile(){
	    String path = "https://192.168.1.1:8080/upload/file";      //上传接口
	    OkHttpClient client = getUnsafeOkHttpClient();          //设置跳过所有ssl认证
	    File file = new File("C:\\xxxxx");           //要上传的文件路径
	    
	    RequestBody fileBody = RequestBody.create(MediaType.parse("application/x-www-form-urlencoded;charset=utf-8") , file); 
	    String name = "fileName";          //文件名称
	    try {
		name = URLEncoder.encode(name, "UTF-8");                 //文件名称编码,防止出现中文乱码
	    } catch (UnsupportedEncodingException e1) {
		//TODO
	    }
	
	    //定义请求体,前面三个为表单中的string类型参数,第四个为需要上传的文件
	    MultipartBody mBody = new MultipartBody.Builder().setType(MultipartBody.FORM) 
	            .addFormDataPart("fileSize" , "12123")                
	            .addFormDataPart("time" , "234234") 
	            .addFormDataPart("name" , name) 
	            .addFormDataPart("file" , name , fileBody)
	            .build();  
		
	    //设置为post请求,url后面为请求路径,header设置请求头(可以设置多个),post后面设置请求体
            Request request = new Request.Builder().url(path).header("xxxx","xxxx").post(mBody).build();
            //执行请求操作
            try {
                Response response = client.newCall(request).execute();
                if(response.isSuccessful()){
                    String result = response.body().string();
                    System.out.println("获取到的响应信息为: "+result);
                }
                response.body().close();
            } catch (Exception e) {
        	//TODO
            }
	}
	
	public static OkHttpClient getUnsafeOkHttpClient() { 
		try { 
			final TrustManager[] trustAllCerts = new TrustManager[]{
					 new X509TrustManager() {
							@Override
							public void checkClientTrusted(X509Certificate[] chain,
									String authType) throws CertificateException {
								// TODO Auto-generated method stub
								
							}
							@Override
							public void checkServerTrusted(X509Certificate[] chain,
									String authType) throws CertificateException {
								// TODO Auto-generated method stub
							}
							@Override
							public X509Certificate[] getAcceptedIssuers() {
								// TODO Auto-generated method stub
								return new 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(500, TimeUnit.MILLISECONDS)
			    .readTimeout(500, TimeUnit.MILLISECONDS);
			builder.sslSocketFactory(sslSocketFactory); 
			builder.hostnameVerifier(new HostnameVerifier() { 
				@Override
				public boolean verify(String arg0, SSLSession arg1) {
					// TODO Auto-generated method stub
					return true;
				} 
				}); 
			return builder.build(); 
		} catch (Exception e) { 
			//TODO
			throw new RuntimeException(e); 
		} 
	}
	
	/*	
	 * 	private static File converMultipartFileToFile(MultipartFile multipartFile){    //将MultipartFile格式对象转File
		File file = null;
		try {
			file = File.createTempFile("tmp", null);
	    	multipartFile.transferTo(file);
	    	file.deleteOnExit();        
		} catch (Exception e) {
	    	e.printStackTrace();
		}
		return file;
	}*/
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值