Upload file in Retrofit 2

后端 未结 4 1785
谎友^
谎友^ 2020-12-29 12:35

I tried the following but on response i am getting 500 error (Internal Server Error) -- help me design the interface for the request in the above screenshot...thank

相关标签:
4条回答
  • 2020-12-29 13:12

    If you would like to send file as binary in a body without using multipart you can remove @Multipart annotation from your code and use @Body annotation. It looks like

    @POST("myrecord")
    Call<ResponseBody> addRecord(@Query("token") String token,@Query("userid") int userId,
                                 @Query("name") String name, @Body RequestBody file);
    
    
    File file = new File(getRealPathFromURI(data.getData()));
    RequestBody requestFile = RequestBody.create(MediaType.parse("image/*"), getRealPathFromURI(data.getData()));
    Call<ResponseBody> responseBodyCall = service.addRecord(token, userId,
                    "newFileName", requestFile);
            responseBodyCall.enqueue(new Callback<ResponseBody>() {
                @Override
                public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                    Log.d("Response", "="+response.code());
                    Log.d("Response", "= "+response.message());
            }
    
            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                Log.d("failure", "message = " + t.getMessage());
                Log.d("failure", "cause = " + t.getCause());
            }
        });`
    
    0 讨论(0)
  • 2020-12-29 13:13
    @Multipart
    @POST("myrecord")
    Call<ResponseBody> addRecord(@Part("file") RequestBody file,@Part MultipartBody.Part file,
    @Query("token") String token,@Query("userid") int userId,@Query("name") String name);
    
    RequestBody requestFile =
            RequestBody.create(MediaType.parse("multipart/form-data"), file);
    
    MultipartBody.Part body =
            MultipartBody.Part.createFormData("picture", file.getName(), requestFile);
    
    
    String descriptionString = "your description";
    
    RequestBody description =
            RequestBody.create(
                    MediaType.parse("multipart/form-data"), descriptionString);
    

    for more information look into this link: https://futurestud.io/blog/retrofit-2-how-to-upload-files-to-server

    0 讨论(0)
  • 2020-12-29 13:20

    The following code worked :)

     @Multipart
    @POST("myrecord")
    Call<ResponseBody> addRecord(@Query("token") String token, @Query("userid") int userId,
                                 @Query("name") String name, @Part MultipartBody.Part file);
    
    
    
     @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if ((requestCode == FILE_SELECT_CODE) && (resultCode == -1)) {
    
            File file = new File(getRealPathFromURI(data.getData()));
    
            RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), getRealPathFromURI(data.getData()));
    
            MultipartBody.Part multipartBody =MultipartBody.Part.createFormData("file",file.getName(),requestFile);
    
            Call<ResponseBody> responseBodyCall = service.addRecord(token, userId, "fileName", multipartBody);
            responseBodyCall.enqueue(new Callback<ResponseBody>() {
                @Override
                public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                    Log.d("Success", "success "+response.code());
                    Log.d("Success", "success "+response.message());
    
                }
    
                @Override
                public void onFailure(Call<ResponseBody> call, Throwable t) {
                    Log.d("failure", "message = " + t.getMessage());
                    Log.d("failure", "cause = " + t.getCause());
                }
            });
    
        }
    }
    
    0 讨论(0)
  • 2020-12-29 13:20
        public String getRealPathFromURI(Context context, Uri contentUri) {
        Log.d("imin", "onClick: in image conversion");
    
        Cursor cursor = null;
        try {
            String[] proj = {MediaStore.Images.Media.DATA};
            cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
            int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            Log.d("imin", "onClick: in image conversion try");
    
            return cursor.getString(column_index);
        } finally {
            Log.d("imin", "onClick: in image conversion finally");
    
            if (cursor != null) {
                cursor.close();
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题