Загрузить изображение с помощью Retrofit и PHP API - PullRequest
2 голосов
/ 09 марта 2020

Я пытаюсь загрузить изображение с помощью Retrofit API. Мой android код похож на ниже

public interface FileUploadService {
    @Multipart
    @POST("upload.php")
    Single<ResponseBody> onFileUpload(@Part("username") RequestBody mUserName, @Part MultipartBody.Part file);
}

, а PHP код похож на ниже

<?php
$target_dir = "upload/";
$target_file_name = $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_file_name)) 
   {
     $success = true;
     $message = "Successfully Uploaded";
   }
   else 
   {
      $success = false;
      $message = "Error while uploading";
   }
}
else 
{
      $success = false;
      $message = "Required Field Missing";
}
$response["success"] = $success;
$response["message"] = $message;
echo json_encode($response);


?>

Я не получаю никакой ошибки на стороне android, и она работает нормально, но на сервере я получаю сообщение об ошибке, как показано ниже

PHP Notice:  Undefined index: file in line 3

Дайте мне знать, что мне не хватает. Спасибо!

1 Ответ

0 голосов
/ 11 марта 2020

В коде вашей серверной части вы ожидаете, что имя поля будет file. Я предполагаю, что при подготовке составных данных в Android вы не используете одно и то же имя (file).

В вашей Деятельности / Фрагменте код подготовки составных данных должен выглядеть следующим образом.

String fileName = "your file name with extension";
RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);
MultipartBody.Part.createFormData("file", fileName, requestBody);
                            // ----^^^^--- look at the field name (first parameter)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...