Bonjour,

Suite à quelques recherche infructueuse, je n'arrive pas à solutionner un soucis avec une API REST.

Pour résumer la situation, lorsque je télécharge un fichier via cette API ceux-ci sont inutilisable. En effet, le body de la réponse que je récupère contient des headers séparés par des boundary enplus des informations relatives au fichier en lui même.
Afin de traiter les appels / réponses avec cette API j'utilise le framework Rest-assured.

Afin de vous donner un exemple du soucis , voici le contenu d'un fichier texte simple téléchargé :

--a8f82a89-d9c2-4fcb-a612-06e286bfcf66
Content-Disposition: form-data; name="metadata"; filename="metadata"
Content-Type: application/json

{"name":"Fichier_de_calcul.txt","id":{"metadata":{"deleted":false,"ephemeral":false,"synthesised":true,"systemOwned":true,"readOnly":false,"synchronisable":true,"createdOn":"2018-11-09T15:36:39Z","enabled":true,"lastModifiedOn":"2018-11-09T15:36:40.444Z"},"value":{"@type":"CoreKit.UUIDKey","value":"4de39a67-0075-4232-a236-09ab8d10aed9"}}}
--a8f82a89-d9c2-4fcb-a612-06e286bfcf66
Content-Disposition: form-data; name="@type"; filename="@type"
Content-Type: text/plain
CoreKit.FileMetadataAndFile
--a8f82a89-d9c2-4fcb-a612-06e286bfcf66
Content-Disposition: form-data; name="file"; filename="file"
Content-Type: application/octet-stream

2
4
6
8
10

--a8f82a89-d9c2-4fcb-a612-06e286bfcf66--
Le "vrai" contenu du fichier est simplement les chiffres.

Voici comment je gère la réception avec Rest-assured :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
                String boundary;
		RestAssured.useRelaxedHTTPSValidation();
		Response resp = RestAssured.given().headers(headers).get(url);
		StringBuilder headerString = new StringBuilder();
 
		resp.then().log().all();
		resp.then().log().headers();
 
		String contentType = resp.getContentType().toString();
		boundary = BoundaryExtractor.getBoundaryFromContentType(contentType);
 
		headers.entrySet().forEach(e -> {
			headerString.append("<br>" + e.getKey() + " = " + e.getValue());
		});
 
		Log.message(resp.headers().toString());
		resp.getContentType();
		resp.getBody();
		String fileName = getFileName(resp.body().asString(), boundary); //fonction faite maison afin de récupérer le nom de fichier, idéalement je souhaiterai le supprimer afin d'utiliser une gestion de parse du body plus générique
 
		 byte[] fileContent = resp.body().asByteArray();
 
		File fileToSave = new File(classPath+fileName);
		try {
 		Files.write(fileContent, fileToSave);
		} catch (IOException e1) {
			e1.printStackTrace();
		}
 
		return resp;

Si quelqu'un a une méthode afin de parser le body, sans tout recoder à la main je suis preneur !

Merci d'avance