Не удается отправить изображение на сервер с помощью Retrofit

я использую Retrofit библиотека для загрузки файла на сервер php, но Unknow error происходит.

Вот мой код Android:

Модифицированный сервис:

@Multipart
@POST("/upload_image.php")
public void uploadImage(@Part("file") TypedFile file, @Query("id_client") long id_client, @Query("id_obj") long id_obj, Callback<Boolean> callback);

Загрузить код:

public void uploadImage(String imagePath, long, clientId, Obj obj, Callback<Boolean> callback) {
TypedFile typedFile = new TypedFile("application/octet-stream", new File(imagePath));
mService.uploadImage(typedFile, clientId, obj.getId(), callback);
}

Код php:

if(move_uploaded_file($_FILES["file"]["tmp_name"],  $destination)){
echo ("Stored     in".$_SERVER[DOCUMENT_ROOT]."/Uploader/UploadedFiles/".$_FILES["file"]["name"]);
} else {
$html_body = '<h1>File upload error!</h1>';
switch ($_FILES[0]['error']) {
case 1:
$html_body .= 'The file is bigger than this PHP installation allows';
break;
case 2:
$html_body .= 'The file is bigger than this form allows';
break;
case 3:
$html_body .= 'Only part of the file was uploaded';
break;
case 4:
$html_body .= 'No file was uploaded';
break;
default:
$html_body .= 'unknown errror';
}
echo ($html_body);
}

При загрузке изображения сервер возвращает: «неизвестная ошибка».

0

Решение

Это потому, что ваш переключатель по умолчанию установлен на неизвестную ошибку, а значение UPLOAD_ERR_OK равно нулю

поэтому вы должны проверить, если $_FILES['image']['error'] имеет значение 0, и если это так, пропустите эту обработку ошибок

На самом деле, похоже, что move_uploaded_file не работает, но трудно сказать, не зная, что $destination переменная указывает на

Но вы должны проверить, является ли $ destination допустимым файлом для записи, и у процесса есть права на запись в него.

Также в качестве хорошей практики кодирования не следует использовать магические значения, такие как 1, 2, 3 … вместо этого используйте константы! UPLOAD_ERR_OK, UPLOAD_ERR_NO_FILE..

..

Также похоже, что вы также пробовали это с формой, и это работает

Вы должны проверить, если TypedFile в устройстве указывает на существующий файл

Я использую модификацию точно так же, и она работает в совершенстве

Если все это не помогает, я бы попытался отслеживать трафик с помощью прокси-сервера для мониторинга HTTP-трафика, такого как Чарльз

и посмотреть, действительно ли файл отправлен

Но я бы сказал, что typedfile не указывает на допустимый файл

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]