0

彼ら。multipart-data で POST リクエストを送信する際に助けが必要です。

クライアント側でリクエストを作成する方法があります。ここにあります:

public void sendMultipart(String cmd , Employee emp) {

    CloseableHttpClient httpClient = HttpClients.createDefault();
    HttpPost uploadFile = new HttpPost(baseUrl + cmd);

    MultipartEntityBuilder builder = MultipartEntityBuilder.create();
    FileBody f = new FileBody(emp.getPhoto());
    try {
    StringBody s = new StringBody(emp.getLogin());
    builder.addPart("name", s);
    builder.addPart("file", f);
    } catch (UnsupportedEncodingException ex) {
        Logger.getLogger(RestTemplateRequester.class.getName()).log(Level.SEVERE, null, ex);
    }
    uploadFile.setHeader("Accept", "application/json");
        uploadFile.setHeader("Content-type", "application/json");
        uploadFile.setHeader("enctype","multipart/form-data");
        uploadFile.setHeader("accept-charset","UTF-8");
    //builder.addTextBody("field1", "yes", ContentType.TEXT_PLAIN);
    //builder.addBinaryBody(emp.getLogin(), emp.getPhoto(), ContentType.MULTIPART_FORM_DATA, "file");
    HttpEntity multipart = builder.build();

    uploadFile.setEntity(multipart);

    try {
        HttpResponse httpResponse =  httpClient.execute(uploadFile);

        int status = httpResponse.getStatusLine().getStatusCode();
        String str = httpResponse.getStatusLine().getReasonPhrase();
    } catch (IOException ex) {
        Logger.getLogger(RestTemplateRequester.class.getName()).log(Level.SEVERE, null, ex);
    }

}

また、サーバー側でリクエストを処理する方法があります。

@RequestMapping(value = "photo", consumes = "multipart/form-data")
public @ResponseBody
void uploadFileHandler(@RequestParam("name") String name,
        @RequestParam("file") MultipartFile file) {

    if (!file.isEmpty()) {
        try {
            byte[] bytes = file.getBytes();

            // Create the file on server
            File serverFile = new File(name);
            BufferedOutputStream stream = new BufferedOutputStream(
                    new FileOutputStream(serverFile));
            stream.write(bytes);
            stream.close();

        } catch (Exception e) {
             e.getMessage();
        }
    }
}

そして私の文脈では:

<bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

     <!-- setting maximum upload size -->
    <property name="maxUploadSize" value="100000" />

</bean>

私が今抱えている問題は、408エラー「リ​​クエストタイムアウト」です。私の共通の目的は、ファイルを含む JSON をサーバーに送信することです。私はJavaのWebサービスにとても慣れているので、いくつかの問題が発生しました。お願いします、誰かが私に少しアドバイスをくれるなら、それは素晴らしいことです。ありがとうございました。

4

1 に答える 1

0

あなたがしようとしていることは、ファイルをアップロードするための受け入れられた方法ではありません (JSON 内にファイルを埋め込む)。さらに、アップロード ファイル ハンドラーは JSON の処理には適していません。代わりに、マルチパート ファイルと名前のみをパラメーターとして処理できます。Spring MVC Multipart と RestTemplate を使用してファイルを正常にアップロードする方法については、以前のQ/ A をご覧ください。

于 2015-03-25T01:20:50.607 に答える