1. 程式人生 > >CloseableHttpClient 和 MultipartFile 配合上傳檔案

CloseableHttpClient 和 MultipartFile 配合上傳檔案

1 後臺

(1)java

@RequestMapping(value = "/showapi", method = RequestMethod.POST)
public ResponseEntity showapi(@RequestParam("file") MultipartFile multipartFile) {
        byte[] byteImg = multipartFile.getBytes();
}
普通的介面,只不過接收引數型別為MultipartFile

(2)spring配置

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
> <property name="maxUploadSize" value="100000" /> <property name="maxInMemorySize" value="100000" /> </bean>
dispatcherServlet是沒有處理multipart/form-data,需要單獨配置一個resolver,id="multipartResolver"預設如此設定
(3)maven依賴
<dependency>
    <groupId>commons-fileupload</groupId>
    <
artifactId>commons-fileupload</artifactId> <version>1.2.1</version> <!-- makesure correct version here --> </dependency>
2 客戶端
public static String decaptcha(File file) {
    CloseableHttpClient client = HttpClients.createDefault();
    HttpPost post = new HttpPost(ReadProperties.read
("captcha.url")); RequestConfig config = RequestConfig.custom().setSocketTimeout(30000).setConnectTimeout(20000).build(); post.setConfig(config);
    FileBody fileBody = new FileBody(file, ContentType.DEFAULT_BINARY);
    MultipartEntityBuilder builder = MultipartEntityBuilder.create();
    builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);builder.addPart("file", fileBody);
    // 相當於 <input type="file" class="file" name="file">,匹配@RequestParam("file")
    // .addPart()可以設定模擬瀏覽器<input/>的表單提交
    HttpEntity entity = builder.build();
    post.setEntity(entity);
    String result = "";

    try {
        CloseableHttpResponse e = client.execute(post);
        HttpEntity resEntity = e.getEntity();
        if(entity != null) {
            result = EntityUtils.toString(resEntity);
            System.out.println("response content:" + result);
        }
    } catch (IOException var10) {
        logger.error("請求解析驗證碼io異常",var10);
        var10.printStackTrace();
    }

    return result;
}

附錄(瀏覽器請求資料格式):

------WebKitFormBoundaryqgkaBn8IHJCuNmiW

Content-Disposition: form-data; name="firstName"Charles

------WebKitFormBoundaryqgkaBn8IHJCuNmiW

Content-Disposition: form-data; name="lastName"Xavier

------WebKitFormBoundaryqgkaBn8IHJCuNmiW

Content-Disposition: form-data; name="email"[email protected]

------WebKitFormBoundaryqgkaBn8IHJCuNmiW

Content-Disposition: form-data; name="username"professorx

------WebKitFormBoundaryqgkaBn8IHJCuNmiW

Content-Disposition: form-data; name="password"letmein01

------WebKitFormBoundaryqgkaBn8IHJCuNmiW

Content-Disposition: form-data; name="profilePicture"; filename="me.jpg"Content-Type: image/jpeg

[[ Binary image data goes here ]]

------WebKitFormBoundaryqgkaBn8IHJCuNmiW--

這些name就是對映到@RequestParam(name)