Как я могу отправить файл Api на сервер, используя Api?С Retrofit2 - PullRequest
0 голосов
/ 28 мая 2019

Я хочу использовать этот API для отправки файла на сервер с помощью retrofit2 .. как мне помочь?

{
    "id": 6,
    "title": "sometitle",
    "image": "http://kavehkm.pythonanywhere.com/media/images/Koala.jpg",
    "description": "some",
    "price": 1000,
    "tell": "09303747240",
    "address": "some",
    "category": 2,
    "owner": 5
}

это правда?

@Multipart
@Post("ads")
Call<ResponseBody> uploadPost(@Header("Authorization") String Token
                                      ,@Part("title") RequestBody title
                                      ,@Part("description") RequestBody description
                                      ,@Part("price) RequestBody price
                                      ,@Part MultipartBody.Part image
                                      ,@Part("category") RequestBody category)

Ответы [ 2 ]

0 голосов
/ 28 мая 2019
@Multipart
@POST(ClientEndPoints.UPLOAD_USER__IMAGE)
fun uploadUserImage(@Part(ClientValues.ID_USER) idUser : RequestBody,
              @Part file : MultipartBody.Part) : Observable<Response<UploadImageResponse>>

А вот так вы отправите свои петиции

 @SuppressLint("CheckResult")
fun uploadUserImage(file : MultipartBody.Part){
    val user = UserData()
    val userId = RequestBody.create(MediaType.parse("text/plain"), user.idUser!!)
    ServiceGenerator.getService().uploadUserImage(userId, file)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe({image -> onSuccessImage(image) },
                    {error -> onErrorImage(error)}
                    ,{onCompleteImage()})
}

А вот как вы готовите файл

private fun prepareFilePart(file : File): MultipartBody.Part { val requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file) val body = MultipartBody.Part.createFormData("image","image", requestFile) return body }

0 голосов
/ 28 мая 2019

Вы должны использовать multipart для загрузки файла на сервер с помощью retrofit2. Видеть это. Для лучшего понимания проверьте здесь

    @Multipart
    @POST("your api url")
    Observable<ResponseBody> uploadFile(@Part("id") RequestBody id,
                                           @Part("title") RequestBody title,
                                           @Part MultipartBody.Part image,
                                           @Part("other") RequestBody other);

    //pass it like this
    File file = new File("/storage/../image.jpg");
    RequestBody requestFile =
            RequestBody.create(MediaType.parse("multipart/form-data"), file);

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

    // add another part within the multipart request
    RequestBody fullName = 
            RequestBody.create(MediaType.parse("multipart/form-data"), "Your Name");

    service.uploadFile(id, fullName, body, other);
...