как получить base64string с камеры и файл, чтобы отправить его на сервер? - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь преобразовать растровое изображение в base64string, чтобы отправить его на сервер, но это не сработает. он просто загружался так долго, а потом отказывал.

это мой код на ActivityResult

@Override
public void onActivityResult(int requenstCode, int resultCode, Intent data) {
    super.onActivityResult(requenstCode, resultCode, data);

    if (resultCode == Activity.RESULT_OK) {
        if (requenstCode == REQUEST_CAMERA) {
            selectedImageBitmap = (Bitmap) data.getExtras().get("data");
            imageView.setImageBitmap(selectedImageBitmap);
        } else if (requenstCode == SELECT_FILE) {
            Uri selectedImageUri = data.getData();
            try {
                selectedImageBitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), selectedImageUri);
            } catch (IOException e) {
                e.printStackTrace();
            }
            imageView.setImageBitmap(selectedImageBitmap);
        }
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        selectedImageBitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
        byte[] byteArrayImage = byteArrayOutputStream.toByteArray();
        encodedImage = Base64.encodeToString(byteArrayImage, Base64.DEFAULT);
    }
}

помогите пожалуйста как заставить работать

1 Ответ

0 голосов
/ 02 июля 2018

Не используйте строку 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");
        }
    });
...