一)引入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();
}
}
}
識别二維碼關注個人微信公衆号
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0zaE1EenpXTwkEVNRTQzwEMW1mY1RzRapnTtxkb5ckYplTeMZTTINGMShUYfRHelRHLwEzX39GZhh2css2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3Pn5GcuYzNyQTM0MjM2IDMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
本章完結,待續,歡迎轉載!
本文說明:該文章屬于原創,如需轉載,請标明文章轉載來源!