107 votes

Comment puis-je faire une demande POST multipart/form-data en utilisant Java ?

À l'époque de la version 3.x de Apache Commons HttpClient, il était possible de faire une demande POST multipart/form-data ( un exemple de 2004 ). Malheureusement, cela n'est plus possible dans version 4.0 de HttpClient .

Pour notre activité principale "HTTP", le multipart est quelque peu hors de portée. Nous aimerions beaucoup utiliser le code multipart maintenu par un certain autre projet pour lequel il est dans le champ d'application, mais je n'en connais aucun. Nous avons essayé de déplacer le code multipart vers commons-codec il y a quelques années. il y a quelques années, mais je n'ai pas décollé là-bas. Oleg a récemment mentionné un autre projet qui a un code d'analyse syntaxique multipart et qui pourrait être intéressé par notre code de formatage multipart. Je ne connais pas le statut actuel sur ce sujet. ( http://www.nabble.com/multipart-form-data-in-4.0-td14224819.html )

Quelqu'un connaît-il une bibliothèque Java qui me permet d'écrire un client HTTP capable d'effectuer une requête POST multipart/form-data ?

Le contexte : Je veux utiliser le API à distance de Zoho Writer .

0voto

shubham kumar Points 33

Mon code pour envoyer des fichiers au serveur en utilisant post in multipart. Utilisation de la carte multivalue lors de la demande d'envoi de données de formulaire.

  LinkedMultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
        map.add("FILE", new FileSystemResource(file));
        map.add("APPLICATION_ID", Number);

   httpService.post( map,headers);

A l'utilisation finale du récepteur

@RequestMapping(value = "fileUpload", method = RequestMethod.POST)
    public ApiResponse AreaCsv(@RequestParam("FILE") MultipartFile file,@RequestHeader("clientId") ){
//code
}

0voto

LKTS Points 25

Utilisation de HttpRequestFactory pour jira xray's /rest/raven/1.0/import/execution/cucumber/multipart :

Map<String, Object> params = new HashMap<>();
            params.put( "info", "zigouzi" );
            params.put(  "result", "baalo"  );
            HttpContent content = new UrlEncodedContent(params);

            OAuthParameters oAuthParameters = jiraOAuthFactory.getParametersForRequest(ACCESS_TOKEN, CONSUMER_KEY, PRIVATE_KEY);
            HttpRequestFactory requestFactory = new NetHttpTransport().createRequestFactory(oAuthParameters);
            HttpRequest request = requestFactory.buildPostRequest(new GenericUrl(url),   content);
            request.getHeaders().setAccept("application/json");
            String boundary = Long.toHexString(System.currentTimeMillis());
            request.getHeaders().setContentType("multipart/form-data; boundary="+boundary);
            request.getHeaders().setContentEncoding("application/json");
            HttpResponse response = null ;
            try
            {
                response = request.execute();
                Scanner s = new Scanner(response.getContent()).useDelimiter("\\A");
                result = s.hasNext() ? s.next() : "";
            }
            catch (Exception e)
            {

            }

a fait l'affaire.

0voto

anson Points 510

Vous serez heureux !

   <dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
   </dependency>
   <dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpmime</artifactId>
    <version>4.3.1</version>
   </dependency>

import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.ByteArrayBody;

byte[] byteArr1 = multipartFile1.getBytes();
byte[] byteArr2 = multipartFile2.getBytes();

HttpEntity reqEntity = MultipartEntityBuilder.create().setCharset(Charset.forName("UTF-8"))
                .addPart("image1", new ByteArrayBody(byteArr1, req.getMultipartFile1().getOriginalFilename()))
                .addPart("image2", new ByteArrayBody(byteArr2, req.getMultipartFile2().getOriginalFilename()))
                .build();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X