J'ai un service REST sur la connexion https qui accepte le téléchargement de fichiers comme multipart (par exemple les métadonnées du fichier et fichier lui-même)service REST - multipart Post (JSON et fichier) en tant que flux sur https en utilisant Jersey
Comment puis-je utilisez Jersey (pour websphere) ou HttpClient pour appeler le service REST et envoyer le fichier en multipart. Je veux envoyer le fichier en tant que plusieurs flux de différentes tailles, car nous pouvons avoir un fichier de plus de 1 Go. En outre, le service REST utilise l'authentification Windows NT pour l'autorisation et est sur https.
Quelqu'un peut-il donner des exemples de comment je peux y parvenir? J'ai utilisé multiClient httpClient. L'envoyer en flux ne fonctionne pas. Ci-dessous est mon code utilisant httpClient 4.5.2
==================================
InputStream stream = new FileInputStream("test.doc");
MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
entityBuilder.setStrictMode();
InputStreamBody streamBody = new InputStreamBody(stream, docHandler.getFilename());
FormBodyPart filePart = FormBodyPartBuilder.create()
.setName("Binary")
.addField(Constants.RETRIEVAL_NAME_FIELD, "test.doc")
.addField("Content-Type",docHandler.getContentType())
.setBody(streamBody)
.build();
entityBuilder.addPart(filePart);
HttpPost httpPostRequest = new HttpPost();
httpPostRequest.setEntity(entityBuilder.build());
httpClient.execute(httpPostRequest);
==================================== Mais quand j'exécute ce code, Je reçois l'erreur suivante
org.apache.http.client.NonRepeatableRequestException: Impossible réessayer la demande avec une entité de demande non répétable
Toute idée pourquoi je reçois cette erreur. Si je convertis stream en tableau byteArray et utilise ByteArrayBody à la place, alors cela fonctionne bien mais j'ai remarqué dans Fiddler que trois appels de requête sont faits au serveur et dans chaque appel le contenu entier du fichier est copié. Donc, si mon fichier est de 1 Go, tout le contenu sera envoyé au serveur trois fois. Tout d'abord, comment puis-je obtenir l'envoi de gros fichiers en morceaux ou en plusieurs flux de sorte que le fichier entier ne soit pas envoyé en un seul appel. Deuxièmement, est-il un moyen d'éviter d'avoir 3 appels au serveur pour l'authentification NTLM?
Des pointeurs?
À la votre!
Copie possible de [Jersey 2 Multipart upload Client] (https://stackoverflow.com/questions/24637038/jersey-2-multipart-upload-client) – andih
Salut andih, ce lien utilise une connexion HTTP simple et non avoir une authentification. Dans mon cas, le service RESTful est sur https et utilise le mécanisme d'authentification NTLM. Y at-il un bon exemple pour télécharger le fichier en tant que flux (je suis inputtream) via le service REST sur https en utilisant le mécanisme d'authentification NTLM? En outre, nous avons websphere où l'application client Java sera en cours d'exécution. Le serveur est implémenté dans .Net. – sab123
Le client HTTP Apache prend en charge http et https. Dans la plupart des cas, vous n'avez même pas besoin de modifier votre code. L'authentification NTLM est quelque chose "au-dessus" de http (s). La version des clients Http Apache> 4.1 (4.2.3) prend en charge [NTLM] (https://hc.apache.org/httpcomponents-client-ga/ntlm.html). Il semble que vous demandiez différentes choses au sein d'une même question. Comment le téléchargement de bloc est un doublon. Le schéma d'authentification NTLM est décrit [ici] (https://www.innovation.ch/personal/ronald/ntlm.html). Si vous pouvez éviter les trois appels. La réponse est non. Vous devriez poser des questions plus spécifiques. – andih