使用Retrofit Android将对象列表上传到mysql

时间:2017-09-01 11:04:59

标签: android json base64 retrofit retrofit2

我有一个自定义对象的ArrayList,每个对象有大约10个字段,我已经设法上传到我们的服务器。问题是其中一个字段是一个字符串,其中包含我从文件转换的Base64编码字符串,而Retrofit Gson创建者似乎并不喜欢。这个问题可以通过发送没有图像的所有字段来解决,然后使用ftp上传所有图像,但如果我能以某种方式将图像放入对象中,那将会更容易。

问题:如何使用Retrofit将Base64编码的字符串作为自定义对象内的字段发送到网址?

3 个答案:

答案 0 :(得分: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 :(得分:1)

以下是我使用RequestBody上传文件的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);

编码文件名:

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

我将api定义为:

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

我希望它对你有所帮助。

答案 2 :(得分:0)

//Convert Object list into json string. 

Gson gson = new Gson();
String objListString = gson.toJson(objectList);

@FormUrlEncoded
@POST("********")
Call<JsonObject> sendObjectList(@Field("objListString") String objListString);

  And at the web end parse string into json.
  @enjoy