首页 > 解决方案 > 在Android中将图像上传到服务器的问题

问题描述

将图像上传到服务器时遇到问题。我有一个上传 url,我必须把图片放到这个 url。我已经尝试了很多次,但收到错误请求错误。

这是我的 API 接口

interface APIInterface {
   @PUT
   fun uploadImage(@Url url:String,@Body image:RequestBody, @HeaderMap headers:HashMap<String,String>):Call<BaseResponse>
 }

这是我调用方法的代码

val requestBody = RequestBody.create(
        null,
        File(photoPath)

val headers = HashMap<String, String>()
    headers["Content-Type"] = "image/jpeg"
    headers["extension"] = "jpeg"
    headers["Authorization"] = token!!

val call=service.uploadImage(url,requestBody ,headers)

标签: androidfile-uploadretrofit

解决方案


通常,我们在 Multipart 中上传文件/图像,因此有这个假设。因此,如果您的 API 也需要 Multipart,那么您可以执行以下操作。

@Multipart
        @POST("/api/devices/{device_id}/image")
        Call<ResponseBody> uploadPhoto(String device_id, @Part MultipartBody.Part image);

您可以从这样的图像路径创建位图

Bitmap bitmap = BitmapFactory.decodeFile(imagePhotoPath);

您可以从位图创建多部分

   public static MultipartBody.Part getPhotoUploadRequestBody(Bitmap bitmap, int compressionQuality) {
    Log.d(TAG, "** getPhotoUploadRequestBody(Context context, Bitmap bitmap) Started ");

    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.JPEG, compressionQuality, stream);
    byte[] byteArray = stream.toByteArray();
    bitmap.recycle();

    RequestBody requestBody = RequestBody.create(MediaType.parse("image/jpg"), byteArray);
    String name = "file"; //Server API expects this
    MultipartBody.Part body = MultipartBody.Part.createFormData(name, name, requestBody);
    Log.d(TAG, "** MultipartBody.Part body created ");
    return body;
}

推荐阅读