Не используйте строку base64 для загрузки изображения. Сожмите изображение и загрузите его на сервер
Вот простой скрипт php
<?php
$target_dir = "img/";
$target_dir = $target_dir .basename($_FILES["file"]["name"]);
$response = array();
// Check if image file is a actual image or fake image
if (isset($_FILES["file"]))
{
if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_dir))
{
$success = true;
$message = "Successfully Uploaded";
}
else
{
$success = false;
$message = "Error while uploading ". $target_dir;
}
}
else
{
$success = false;
$message = "Required Field Missing";
}
$response["success"] = $success;
$response["message"] = $message;
echo json_encode($response);
?>
Создать интерфейс для FileUpload
public interface FileUploadService {
@Multipart
@POST("upload.php")
Call<ResponseBody> upload(
@Part MultipartBody.Part file
);
@GET("images/{imageName}")
Call<okhttp3.ResponseBody> getImage(@Path("imageName") String imageName);
}
На стороне Android Используйте Retrofit для загрузки сжатого изображения на сервер
file = new File(imagePath);
FileUploadService service =
getRetrofit().create(FileUploadService.class);
// create RequestBody instance from file
RequestBody requestFile =
RequestBody.create(
MediaType.parse(getContentResolver().getType(imageUri)),
file
);
// MultipartBody.Part is used to send also the actual file name
MultipartBody.Part body =
MultipartBody.Part.createFormData("file", file.getName(), requestFile);
Call<ResponseBody> call = service.upload(body);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
Log.v("Upload", "success");
String resource = BASE_URL + "images/" + file.getName();
sendMessage(resource, recieverBareid);
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Log.v("Upload", "failed");
}
});