【问题标题】:How can I send an Api file to the server using the Api? With Retrofit2如何使用 Api 将 Api 文件发送到服务器?带改造2
【发布时间】:2019-10-14 03:33:09
【问题描述】:

我想使用这个 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)

【问题讨论】:

  • 您需要使用Request body发送文件到服务器或使用part发送图片到服务器和partmap中的其他参数。

标签: android upload retrofit2


【解决方案1】:

您必须使用 multipart 将文件上传到使用 retrofit2 的服务器。看到这个。为了更好地理解check here

    @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);

【讨论】:

    【解决方案2】:
    @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 }

    【讨论】:

      猜你喜欢
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      • 2021-07-06
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多