一)引入okhttp3的jar
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.0.0</version>
</dependency>
二)提供一个上传服务接口,文件类型为MultipartFile
package com.oysept.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.oysept.vo.FileVO;
@RestController
public class MultipartUploadController {
/**
* 该方式是二进制流操作, 适合所有类型文件上传
* 访问地址: http://localhost:8080/okhttp3/post/multipartFile
* 请求方式: POST
* 传参方式: multipart
* @param dataVO
* @return
*/
@RequestMapping(value="/okhttp3/post/requestParam/multipart", method = RequestMethod.POST)
public String multipartRequestParam(@RequestParam("files") MultipartFile multipartFile,
@RequestParam("param") String param) {
System.out.println("==>/okhttp3/post/requestParam/multipart,\n param: " + param + ",\n files: "+ multipartFile);
// 处理业务逻辑
return "/okhttp3/post/requestParam/multipart SUCCESS!";
}
// 访问地址: http://localhost:8080/okhttp3/post/responseBody/multipart
// 多文件+参数上传
@RequestMapping(value="/okhttp3/post/responseBody/multipart", method = RequestMethod.POST)
public String multipartResponseBody(@RequestParam("files") MultipartFile multipartFile,
FileVO fileVO) {
System.out.println("==>/okhttp3/post/responseBody/multipart,\n fileVO: " + fileVO + ",\n files: "+ multipartFile);
// 处理业务逻辑
return "/okhttp3/post/responseBody/multipart SUCCESS!";
}
}
三)客户端提供调用方式,可传入多个文件+多个参数方式
package com.oysept.test;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
/**
* multipart/form-data表单多文件+多参数
* @author ouyangjun
*/
public class MultipartFileUploadTest {
public static void main(String[] args) {
// 请求地址
String url = "http://localhost:8080/okhttp3/post/responseBody/multipart";
// 请求参数
Map<String, Object> paramsMap = new HashMap<String, Object>();
paramsMap.put("files", new File("D:\\test.txt"));
paramsMap.put("fileName", "GGGGG");
paramsMap.put("fileSize", 555);
paramsMap.put("fileType", "77777");
httpMethod(url, paramsMap);
}
public static void httpMethod(String url, Map<String, Object> paramsMap) {
// 创建client对象 创建调用的工厂类 具备了访问http的能力
OkHttpClient client = new OkHttpClient()
.newBuilder()
.connectTimeout(60, TimeUnit.SECONDS) // 设置超时时间
.readTimeout(60, TimeUnit.SECONDS) // 设置读取超时时间
.writeTimeout(60, TimeUnit.SECONDS) // 设置写入超时时间
.build();
// 添加请求类型
MultipartBody.Builder builder = new MultipartBody.Builder();
builder.setType(MediaType.parse("multipart/form-data"));
// 创建请求的请求体
for (String key : paramsMap.keySet()) {
// 追加表单信息
Object object = paramsMap.get(key);
if (object instanceof File) {
File file = (File) object;
builder.addFormDataPart(key, file.getName(), RequestBody.create(file, null));
} else {
builder.addFormDataPart(key, object.toString());
}
}
RequestBody body = builder.build();
// 创建request, 表单提交
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
// 创建一个通信请求
try (Response response = client.newCall(request).execute()) {
// 尝试将返回值转换成字符串并返回
System.out.println("==>返回结果: " + response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
}
识别二维码关注个人微信公众号
本章完结,待续,欢迎转载!
本文说明:该文章属于原创,如需转载,请标明文章转载来源!
版权声明:本文为p812438109原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。