SpringBoot2.1.x,okhttp3网络请求之MultipartFile方式上传文件,multipart/form-data表单多文件+多参数

)引入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版权协议,转载请附上原文出处链接和本声明。