Сохранение значения в поле <input type="file"> при нажатии кнопки отправки

У меня есть поле <input type="file" > вместе с другими текстовыми полями в форме. Когда я пытаюсь загрузить любые файлы с помощью кнопки обзора, а затем нажмите кнопку отправки, значение в поле ввода типа = "файл" исчезнет, ​​я хотел бы, чтобы просматриваемое значение оставалось в поле <input type="file" >, если ошибки присутствуют в других полях, есть ли способ сохранить значение, которое просматривается, и чтобы оно оставалось в поле <input type="file" > при нажатии кнопки отправки,

<form action="form.php" method="post" enctype= multipart/form-data> 

<input type="file" value="$file" name="file"/> 
<input type="text" value="$line" name="line"> 
 <input type="submit"  name="btnsubmit"> 

</form> 

if($_POST['btnsubmit']) 
{
$line =$_POST['line'];
$file =$_FILES['file'] ['name'];

if($line) 
{
//do something
//conditions for   file check   here 

}
else 
//error 

}

Ответ 1

Это невозможно сделать. Защита браузера запрещает вам заполнять поле ввода файлов, чтобы веб-сайты не могли украсть личные файлы по своему усмотрению без разрешения пользователя сначала (нажав "Обзор..." и выбрав файл).

РЕДАКТИРОВАТЬ: Это невозможно сделать изначально - но вы можете попытаться использовать мастер CSS, чтобы отобразить ранее выбранное имя файла, а не рядом с полем ввода файла, чтобы намекнуть на пользователя. Если вы хотите попробовать и действительно здорово, вы также можете попытаться наложить область отображения текста на входе в браузер с помощью другого div, в котором было записано предыдущее имя файла. Но это не позволит щелкнуть по области ввода, и поэтому пользователь недружелюбен. Слишком много работы, небольшая награда.

Ответ 2

Это не разрешено устанавливать никаким script для целей безопасности, реализованным поставщиками браузеров в качестве ввода файла как readonly.

Ответ 3

Есть один способ сделать это. Отправьте данные формы для проверки с помощью метода отправки AJAX, чтобы пользователь никогда не покидал страницу или не "подавал" форму. Таким образом, вы можете проверить результат на стороне сервера, но пользователь все еще имеет все свои значения, включая входные файлы.

Ответ 4

Как уже упоминалось, input[type=file] только для чтения. Подтверждая свой ввод на стороне клиента, вы можете предотвратить отправку, если все поля не действительны.... и, в большинстве случаев, он обеспечивает намного лучший пользовательский интерфейс!

Проверьте jquery.validation или какой-либо другой плагин проверки для вашей любимой структуры или напишите ее самостоятельно. Имейте в виду, что вы также должны проверять на стороне сервера.

Предотвращая запрос, вход в файл будет поддерживать его значение до тех пор, пока все поля не будут в порядке. Если вам нужна проверка на стороне сервера, вы также можете сделать это с помощью ajax.