改造:2.0.0-beta2文件数组

时间:2015-12-12 09:55:22

标签: android retrofit multipartform-data

我正在使用改装改造:2.0.0-beta2向服务器发送多个数据。 数据包含文件数组ArrayList<File>。 我正在使用此代码发送文件:

public Call<User> requestUpdateProfile3(String token, File image) {    
RequestBody requestBodyImage = RequestBody.create(MediaType.parse("multipart/form-data"), image);
            return apiService.updateProfile3(token, requestBodyProfile, requestBodyImage);

和ApiService上的这个

@Multipart
    @POST("/shanyraq/profile/update")
    Call<User> updateProfile3(
            @Header(value = "X-AUTH-TOKEN") String toke,
            @Part("1\"; filename=\"1.jpg") RequestBody image);

问题是:如何使用改造发布文件数组:2.0.0-beta2 ??

3 个答案:

答案 0 :(得分:3)

我上传了多张图片,如下所示。哪个上传带有他们名字的图片。

服务界面:

    @Multipart
    @POST(ConstantsWebService.UPLOAD_SERVICES_IMAGE)
    Call<List<String>> uploadImage(
             @Header("Authorization") String token,
             //@Part("file\"; filename=\"902367000083-1.jpg") RequestBody mapFileAndName); //for sending only one image
             @PartMap() Map<String,RequestBody> mapFileAndName); //for sending multiple images

请求:

    HashMap<String,RequestBody> map=new HashMap<>(listOfNames.size());
    RequestBody file=null;
    File f=null;

    for(int i=0,size=listOfNames.size(); i<size;i++){
        try {
            f = new File(context.getCacheDir(), listOfNames.get(i)+".jpg");
            FileOutputStream fos = new FileOutputStream(f);
            Bitmap bitmap = getImageFromDatabase(listOfNames.get(i));
            if(bitmap!=null){
                bitmap.compress(Bitmap.CompressFormat.JPEG, 0 /*ignored for PNG*/, fos);
                fos.flush();
                fos.close();
            }else{
                view.showErrorView("imageNotFound"); //todo
                return;
            }
        } catch (Exception e) {
            e.printStackTrace();
            view.showErrorView("imageNotFound || file not created"); //todo
            return;
        }

        file=RequestBody.create(MediaType.parse("multipart/form-data"), f);
        map.put("file\"; filename=\""+listOfNames.get(i)+".jpg",file);
        file=null;
        f = null;
    }

    serviceOperation.uploadImage(token,map).enqueue(){..}

所以你改变了返回类型,标题名称,图像名称。

答案 1 :(得分:0)

如果这对你有帮助,我会很高兴也很高兴。

服务器API合同: 输入类型:多部分 - 来自数据

要通过名为&#34; 图像&#34;

的密钥发送到正文的数据
<body ng-controller="MainCtrl">
 <div ng-init="value = cal_result()">
  <h4 ng-if="value < 0">0</h4>
  <h4 ng-if="value > 0">{{value}}</h4>
</div>

答案 2 :(得分:0)

    Interface structure:
    @Multipart
    @POST("user_edit_profile_save")
    Call<EditProfileDto> saveEditProfile(@Part("first_name") RequestBody first_name, 
                                         @Part MultipartBody.Part profile_picture);


    Calling:
RequestBody requestBodyUserId = RequestBody.create(
                    MediaType.parse("multipart/form-data"), "5");
MultipartBody.Part body = null;
            if (path != null && path.length() > 0) {
                file = new File(path);
                isImageSet = true;
                requestBodyPicture = RequestBody.create(
                        MediaType.parse("multipart/form-data"), file);
                body = MultipartBody.Part.createFormData("profile_picture", file.getName(), requestBodyPicture);

            } else {
                requestBodyPicture = RequestBody.create(
                        MediaType.parse("multipart/form-data"), "");
            }