2017-09-01 6 views
0

J'ai une ArrayList d'objets personnalisés, chacun avec environ 10 champs, que j'ai déjà réussi à télécharger sur notre serveur. Le problème est que l'un des champs est une chaîne qui contient une chaîne codée en Base64 que j'ai convertie à partir d'un fichier, ce que le Créateur Retrofit Gson ne semble pas aimer. Ce problème pourrait être résolu en envoyant simplement tous les champs sans l'image, puis après télécharger toutes les images en utilisant ftp, mais ce serait tellement plus facile si je pouvais simplement mettre l'image dans l'objet en quelque sorte. Question: Comment puis-je envoyer une chaîne encodée en Base64 sous la forme d'un champ dans un objet personnalisé à une URL en utilisant Retrofit?Télécharger la liste des objets à mysql en utilisant Retrofit Android

+0

Quel est le problème lorsque vous essayez de créer l'objet avec Gson? – barotia

Répondre

1
@FormUrlEncoded 
@POST("/UploadImages") 
Call<ResponseBody> postImages(@Body ArrayListImage img); 

//POJO CLASS 

public class ArrayListImage { 
    @SerializedName("image") 
    @Expose 
    private ArrayList<String> image; 
    public ArrayListImage(ArrayList<String> image) { 
     this.image=image; 
    } 
} 
1

est sous le code RequestBody que j'utilise pour télécharger le fichier en utilisant Retrofit:

RequestBody lRequestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file); 
MultipartBody.Part lFile = MultipartBody.Part.createFormData("file", file.getName(), lRequestBody); 
MultipartBody.Part title = MultipartBody.Part.createFormData("title", file.getName()); 
MultipartBody.Part lFilenamebase64 = MultipartBody.Part.createFormData("filenamebase64", base64EncodedFileName); 

Pour encoder le nom du fichier:

String base64EncodedFileName = Base64.encodeToString(file.getName().getBytes(Charsets.UTF_8), Base64.URL_SAFE | Base64.NO_WRAP); 

je définissais l'api comme:

@Multipart 
@POST("/upload") 
Observable<Response<ResponseBody>> uploadFile(@Part MultipartBody.Part file, @Part MultipartBody.Part title, @Part MultipartBody.Part base64EncodedFileName); 

J'espère que cela pourrait vous aider.