я использую 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);
}
При загрузке изображения сервер возвращает: «неизвестная ошибка».
Это потому, что ваш переключатель по умолчанию установлен на неизвестную ошибку, а значение 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 не указывает на допустимый файл
Других решений пока нет …