Когда не хочется заморачиваться загрузкой файла, ибо на серверной стороне из него нужна одна строчка, и вдобавок пользователь может захотеть эту строчку вписать копипастой, потому что у него в локальных файлах её вообще нет, она где-нибудь на другой машине хранится..
Конкретный пример – загрузка публичного ключа от ssh.
Делаем так: в основной форме для этой строчки используем обычный input типа text, который можно заполнить руками. А чтобы прочитать в него строчку из файлика, встраиваем рядышком (или даже прямо внутрь основной формы) дополнительную форму с input типа file и обработчиком на JS, который читает файлик сразу после его выбора в браузере и засовывает нужный контент в поле основной формы:
<script type="text/javascript">
var fileformchange = function(event) {
var input = event.target.files[0];
var reader = new FileReader();
reader.onload = function(){
var text = this.result.split('\n')[0];
document.forms["mainform"]["pubkey"].value=text;
}
reader.readAsText(input);
}
</script>
<form id="mainform" action="куда надо" method="POST">
Login: <input type="text" name="login" maxlength="30"/>
Password: <input type="password" name="password" maxlength="30"/>
SSH public key:<input type="text" name="pubkey" id="pubkey" size="50" maxlength="16384"/>
ещё что надо...
Потом отдельная формочка для выбора файла:
<form id="fileform">Read key from file: <input type="file" id="rf" onchange="fileformchange(event)"/></form>
А потом завершение основной формы:
<input type="submit" name="submit" value="Upload"/>
</form>
P.S. Сколько уже времени я формально считаюсь сисадмином, а на практике постоянно приходится заниматься программированием. Сейчас вот на javascriptе, в котором я не очень силён..
Оригинал этой записи в личном блоге.
no subject
Посмотрел на результат, матюкнулся, убрал split - всё хорошо.
no subject