2016-01-19 4 views
2

Je suis en train de télécharger l'image par demande POST multipart qui devrait avoir une structure comme celle-ci:2.0 multipart Rénovation d'image télécharger

--------------------- -------- 219391268715340 Content-Disposition: données de formulaire; name = "photos []"; filename = "DSCF0157-Laptop.JPG" Content-Type: image/jpeg

(octet de données)

Mon code:

 MediaType mediaType = MediaType.parse("image/jpeg"); 
     ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
     byte[] byteArray = stream.toByteArray(); 

     RequestBody file=RequestBody.create(mediaType, byteArray); 
     map.put("form-data; name=\"photos[]\"; filename=\""+filename+".jpg",file); 

J'utilise la carte à cause de l'annotation @PartMap - I vouloir télécharger plusieurs fichiers. Mon serveur renvoie le code http 200 - mais aucun fichier n'est téléchargé. Api call a été testé - il fonctionne correctement s'il est utilisé par notre application web. Toute idée de ce que je fais mal

Répondre

2

Si vous souhaitez télécharger plusieurs fichiers dans une demande à l'aide Retrofit 2, vous pouvez vous référer à ma réponse à la question ci-dessous

Retrofit - Multipart request: Required MultipartFile parameter 'file' is not present

Avec un peu modifications:

WebAPIService.java:

@Multipart 
@POST("/api/fileupload") 
Call<ResponseBody> postFiles(@Part List<MultipartBody.Part> fileList); 

FileActivity.java:

... 
List<MultipartBody.Part> fileList = new ArrayList<>(); 
for (int i = 0; i < 2; i++){ 
    fileList.add(body); 

} 
Call<ResponseBody> call = service.postFiles(fileList); 
call.enqueue(new Callback<ResponseBody>() { 
    @Override 
    public void onResponse(Call<ResponseBody> call, 
          Response<ResponseBody> response) { 
     Log.i(LOG_TAG, "success"); 
    } 

    @Override 
    public void onFailure(Call<ResponseBody> call, Throwable t) { 
     Log.e(LOG_TAG, t.getMessage()); 
    } 
}); 

Bien sûr, avec le code ci-dessus, en fait, le même fichier (corps) sera chargé en 2 parties dans la demande. En conséquence, dans le serveur Web, vous aurez 2 fichiers avec le même contenu, vous pouvez personnaliser le fileList avec de nombreux fichiers différents :)

Hope it helps!

0

Peut-être que vous pouvez faire comme ça.

YourAPIService

@Multipart 
@POST("api/image/upload") 
Call<ImageUploadResponse> uploadImage(@Part("photos") List<RequestBody> imageFiles); 

YourActivity

//prepare request body 
List<RequestBody> images = new ArrayList<>(); 
for (int i = 0; i < filePath.size(); i++){ 
RequestBody file = RequestBody.create(MediaType.parse("image/*"), filePath.get(i); 
    images.add(file); 
} 

//call api 
Call<ImageUploadResponse> call = imageUploadService.uploadImage(images); 
    call.enqueue(new Callback<ImageUploadResponse>() { 
     @Override 
    public void onResponse(Call<ImageUploadResponse> call, 
         Response<ImageUploadResponse> response) { 

    } 

    @Override 
    public void onFailure(Call<ImageUploadResponse> call, Throwable t) { 

    } 
});