【问题标题】:Issue with image upload using Retrofit使用 Retrofit 上传图片的问题
【发布时间】:2017-11-29 00:54:54
【问题描述】:

我正在使用改造在服务器上上传图片,图片上传成功,但没有扩展。 意味着只有图像名称上传到数据库,扩展名不存在。 所以图像对我来说变得毫无用处。 请提供帮助。 这是我在界面中的方法->

    @FormUrlEncoded
        @POST("/webservices/AssessorAssetsUpload.php")
        Call<ImageModel> uploadImage(
            @Field("name")String pictype,
            @Field("type")String uploadtype,
            @Field("accesser_id")String asses_id,
            @Field("paper_schedule_id")String paper_id,
            @Field("imagefile")String image
        );


    my activity code->

        String image=imagetoString();

            RetrofitInterface retrofit=ApiClient.getApiClient().create(RetrofitInterface.class);
            Call<ImageModel> call=retrofit.uploadImage(imageName,"image",assessor_id,paperId,image);

            call.enqueue(new Callback<ImageModel>() {
                @Override
                public void onResponse(Call<ImageModel> call, Response<ImageModel> response) {
                    System.out.println(response.body().getStatus()+" "+response.body().getMsg()+" "+response.body().getUrl());

                }
                @Override
                public void onFailure(Call<ImageModel> call, Throwable t) {
                    t.printStackTrace();
                }
            });
        }

    private String imagetoString(){
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.JPEG, 90, stream);
    byte[] bytes=stream.toByteArray();
        return Base64.encodeToString(bytes,Base64.DEFAULT);
    }

【问题讨论】:

    标签: retrofit2 image-uploading


    【解决方案1】:
    We use Multipart instead of formurlencoded in case of any multimedia object.
    
         @Multipart
            @POST("/webservices/AssessorAssetsUpload.php")
            Call<ImageModel> uploadImage(
                @Part("name")RequestBody pictype,
                @Part("type")RequestBody uploadtype,
                @Part("accesser_id")RequestBody asses_id,
                @Part("paper_schedule_id")RequestBody paper_id,
                @Part("imagefile")MultipartBody.Part image
            );
    
    
        MultipartBody.Part image=imagetoPart();
    
                RetrofitInterface retrofit=ApiClient.getApiClient().create(RetrofitInterface.class);
                Call<ImageModel> call=retrofit.uploadImage(
                    getTextRequest("imageName"),
                    getTextRequest("image"),
                    getTextRequest("assessor_id"),
                    getTextRequest("paperId"),
                    image
                    );
    
                call.enqueue(new Callback<ImageModel>() {
                    @Override
                    public void onResponse(Call<ImageModel> call, Response<ImageModel> response) {
                        System.out.println(response.body().getStatus()+" "+response.body().getMsg()+" "+response.body().getUrl());
    
                    }
                    @Override
                    public void onFailure(Call<ImageModel> call, Throwable t) {
                        t.printStackTrace();
                    }
                });
            }
    
        private String imagetoPart(){
    
            Bitmap bitmap = BitmapFactory.decodeFile("Image Path");
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.JPEG, 90, stream);
            byte[] bytes=stream.toByteArray();
            RequestBody reqFile = RequestBody.create(MediaType.parse("image/*"), bytes);
            MultipartBody.Part part = MultipartBody.Part.createFormData("name", "name", reqFile);
    
            return part;
        }
    
     private RequestBody getTextRequest(String body) {
    
            RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"), body);
    
            return requestBody;
        }
    

    我们需要将字段转换为请求正文,将图像转换为多部分正文,以将其作为多部分请求发送。这将完成您的工作。

    【讨论】:

      猜你喜欢
      • 2015-11-17
      • 2014-06-14
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      • 2021-08-28
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多