无法从改造中POST多部分数据2

Bip*_*ari 7 android multipartform-data multipart retrofit retrofit2

我必须以这种格式发送一个帖子请求.

--__X_PAW_BOUNDARY__
Content-Disposition: form-data; name="user_photo[image]"; filename="file.jpg"
Content-Type: image/jpeg

ÿØÿàJFIFHHÿáLExifMM*i    
ÿí8Photoshop 3.08BIM8BIM%ÔÙ²é   ìøB~ÿÀ
 "ÿÄ    
ÿĵ}!1AQa"q2¡#B±ÁRÑð$3br    
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ 
ÿĵw!1AQaq"2B¡±Á    #3RðbrÑ
$4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÛC                                       ÿÛC                                                                                                                                                                                                         ÿÝZÿÚ?ü_¢+þæð¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¢(¯ë3þ
Run Code Online (Sandbox Code Playgroud)

我基本上试图在邮件请求中发送一张照片,其名称user_photo[image]如下图所示:

在此输入图像描述

以下是我考虑过的解决方案的片段:

    Call<models.UploadResponse> uploadPhoto(@Path("id") int userId, @Part MultipartBody.Part file);


        MultipartBody.Part body = MultipartBody.Part.createFormData("user_photo[image]", file.getName(), requestFile);
Call<models.UploadResponse> call = userRequest.uploadPhoto(62, body);



    RequestBody requestFile =
            RequestBody.create(MediaType.parse("image/*"), FileUtils.getFile(PhotoUploadActivity.this, fileUri));
    Call<models.UploadResponse> call = userRequest.uploadPhoto(62, requestFile);

    Call<models.UploadResponse> uploadPhoto(@Path("id") int userId, @Part ("name=\"user_photo[image]\"") RequestBody file);

    @Multipart
        @POST("users/{id}/user_photos")
    Call<models.UploadResponse> uploadPhoto(@Path("id") int userId, @Part("name=\"user_photo[image]\"") RequestBody file);
Run Code Online (Sandbox Code Playgroud)

这是okhttp日志:

D/OkHttp: Content-Type: multipart/form-data; boundary=75e8ae2e-a160-413f-82d1-3afd94f22c43
D/OkHttp: Content-Length: 43706
D/OkHttp: ??????JFIF?????????????????Photoshop 3.0??8BIM??????????hg??vdP4uk_QnzZ02cW1f845(??JFBMD0f00078d0300006c1d0000675000009d53000068590000c77e000041a90000b1a90000??ICC_PROFILE??????lcms????mntrRGB XYZ ?????????)??9acspAPPL?????????????????????????????????????????????????????????????????-lcms??????????????????????????????????????????????????????????????????????????????????????????????
D/OkHttp: desc?????????????^cprt????\??????wtpt????h??????bkpt????|??????rXYZ???????????gXYZ???????????bXYZ???????????rTRC???????????@gTRC???????????@bTRC???????????@desc??????????????c2????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????text????????FB????XYZ ?????????????????????????-XYZ ????????????????3?????XYZ ????????????o?????8??????XYZ ????????????b????????????XYZ ????????????$????????????curv??????????????????????c?k??Q4!?)?2;?FQw]?kpz???|?i?}???0??????C??
D/OkHttp: 
D/OkHttp:   
D/OkHttp: ?"?????????????????????????????????????????????????????????????????????????<r9??????J???????@??aCLk@?|2?=?VW?}??????E???? ?,i?v!?Q;j?H?N@E0!??1?J?T5L4???????? ??h???U??S????6v???2??]
D/OkHttp: ????3??T0??-@t?`&h????????%????????[w(?????f^
D/OkHttp: C???;???t??????E??I?O?[?Hv? -?g?t?k???y????????6S7zEe??/??I_??b??;?Gr??/?:B??R-7$eO??M??G??I??G2?r?s7#p?P??Ha?o6U?$?3(?????G\?q?4???Dj?S???????n?V???J?f?m{{???q?<\??_L???v+?1??-?\h???\u?Pnms????9   ??".~N?z?*J>f?I?:$??T   j?C?{???$?_$3y????y?¼žj???j???s?z?)?o???J????]????????s]???
D/OkHttp: ??)??(?u??????Ll_T???S??"(??_o?{n?3???}OU?P`}C^zl?]?V"}??u?Un|=????-?mn?e?1?g???S???Q0?ggF??????B?;?>????P???5c?x"?#o?9??s`?j2????O?Y??a??-???zy???d???
D/OkHttp: E?r?jqL?ah?^?u??'?+?Z????N:{a?'N??1???H?M?t ?H???i???û???hP
D/OkHttp: ???0???
D/OkHttp: ?????Y#M?qg???+?????T?????????4?@??CA@??????????&????G????wL???<Vo?l?Q??????H_?a?I??T??z??H???Z????S?b)???d???L11?3??????hL ?????h????b? ????
D/OkHttp: <Rf"??L??(?
D/OkHttp: s??3?Pg???`g?????>&|J?S%???]?b?m?q#??k??
Run Code Online (Sandbox Code Playgroud)

也:

我提到的解决方案:

  1. https://github.com/square/retrofit/issues/1140
  2. https://futurestud.io/blog/retrofit-2-how-to-upload-files-to-server
  3. Retrofit - Multipart请求:必需的MultipartFile参数'file'不存在
  4. Multipart Retrofit 2.0图片上传
  5. https://github.com/square/retrofit/issues/1063

我厌倦了寻找解决方案.有人可以帮忙吗?

Vis*_*tel 9

在API方面

  @Multipart
  @POST("users/{id}/user_photos")
  Call<SignUpResp> uploadPhoto(@Part("description") RequestBody description, @Part MultipartBody.Part file,(add if more parameter req as like ID,name));
Run Code Online (Sandbox Code Playgroud)

在java文件端

    if (fileUpload != null) {


        /**
         * code for multipart
         */

        // create RequestBody instance from file
        RequestBody requestFile =
                RequestBody.create(MediaType.parse("multipart/form-data"), fileUpload);

        // MultipartBody.Part is used to send also the actual file name
        MultipartBody.Part body =
                MultipartBody.Part.createFormData("user_photo[image]", fileUpload.getName(), requestFile);

        // add another part within the multipart request
        String descriptionString = "hello, this is description speaking";
        RequestBody description =
                RequestBody.create(
                        MediaType.parse("multipart/form-data"), descriptionString);


        call = userRequest.uploadPhoto(description, body, authData);

    }
Run Code Online (Sandbox Code Playgroud)


Hou*_*ass 0

您必须将其作为键入的文件发送。

 TypedFile upload_file = new TypedFile("multipart/form-data", new File(your_file_location));

 @Multipart
 @POST("users/{id}/user_photos")
 Call<models.UploadResponse> uploadPhoto(@Path("id") int userId, @Part("name=\"user_photo[image]\"")TypedFile upload_file);
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你