Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Загрузка множества файлов через форму


Автор: Nikius 15.7.2009, 14:49
Есть на сайте форма, через которую можно загрузить файлы. По умолчанию там только один input стоит. но есть кнопка, которая скриптом добавляет туда еще один инпут при нажатии.

Была поставлена следующая задача:
Человеку хочется добавить таким макаром тысячу файлов и кликать каждый раз на кнопку, что добавляет инпут, а затем на кнопку "обзор" слишком долго. Он хочет как в винде: нажать "обзор", выбрать все нужные файлы, нажать "открыть", нажать "отправить".
Не обязательно делать именно так, главное, чтобы не приходилось для выбора каждого файла открывать свое диалоговое окно.

При этом редактировать сам сайт возможности нет. 

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

Да, вот тот кусок кода, который отвечает за форму добавления:
Код

<form action="" method="POST" enctype="multipart/form-data">

    <table cellpadding="1" cellspacing="0" id="file_fields">
       <tr>
             <td><input type="file" name="photos[]"></td>
           </tr>
       </table>
       
       <a href="" id="add_file_field">Добавить еще фото</a>
       <input type="submit" value="Сохранить" />
</form>


Автор: IDVsbruck 15.7.2009, 15:13
Чтобы "не приходилось для выбора каждого файла открывать свое диалоговое окно" - только флеш, посредством js этого не сделать.

Автор: Nikius 15.7.2009, 15:18
Так проблема в том, что доступ к самому сайту на уровне пользователя. Туда флеш никак не впилить.

Заказчик утверждает, что у него уже есть подобная программа, которая все это делает, но у нее непонятное ограничение - добавлять можно от 50 файлов за раз. Если меньше то не работает.

Посмотреть я на эту прогу не могу, так как заказчик уперся и хочет посмотреть справлюсь ли я сам.

Автор: ksnk 15.7.2009, 16:11
Nikius, Скорее всего "подобная программа" - это какая-нибудь программа, которая эмулирует броузер, загружает на сайт файлы прямым post запросом. Выбирать более любимую систему программирования и писать броузерозаменитель из предложенных разработчиками примеров. Получится что-то вроде "удаленной админки"...

Автор: Nikius 15.7.2009, 17:41
Ясно. Спасибо за совет.

Автор: solenko 15.7.2009, 18:51
ksnk, ну зачем же так жестоко -- десктопное приложение? )

Nikius, погуглите загрузчики на флеше -- они делают как раз то, что вам нужно

Автор: Nikius 15.7.2009, 22:04
На флеш - это не совсем то, что хотелось бы.

У меня была такая идея: написать код на JS и запустить его используя адресную строку браузера. Сам код откроет дочернее окно в, котором я выведу список файлов. Из них выбираются те, которые надо загружать и жмется ОК. Используя полученный список файлов JS штампует нужное количество инпутов. Потом останется только нажать submit и файлы начнут грузиться.

Пока это только идея. Начал писать и тут возник затык с присваиванием инпуту нужного значения. Пишу к примеру:
Код

<form action="" method="post">
<input id="f1" type="file">
</form>
<script>
document.getElementById('f1').value="Z:\home\localhost\www\z.php";
</script>


И никакого эффекта. Value объекта f1 не изменяется. Мож тут как-то по-другому делать надо?

Автор: ksnk 15.7.2009, 22:13
solenko, 
Цитата(Nikius @  15.7.2009,  15:18 Найти цитируемый пост)
что доступ к самому сайту на уровне пользователя. Туда флеш никак не впилить.

Случай клинический smile ftp нет, полезных ископаемых - нет, живут роботы...  smile 

Автор: Nikius 15.7.2009, 22:22
Ничего не могу с этим поделать. Тут либо я делаю эту фигню, либо меня признают хреновым программером и не хотят работать со мной.  smile 

Автор: bars80080 15.7.2009, 22:55
Цитата(Nikius @  15.7.2009,  22:04 Найти цитируемый пост)
И никакого эффекта. Value объекта f1 не изменяется

какая неприятность, а то что это специально сделали, чтобы шаловливые ручки прогеров не лазили по компам пользователей, не догадываешься?

javascript здесь тебе не помощник, только если в расширении ActiveX для ИЕ. с ним ты ещё сможешь сварить такой комплекс

Автор: Nikius 15.7.2009, 23:33
Об этом ни где явно не сказано, так что по умолчанию я считал, что все работает. 
А ActiveX сможет в автоматическом режиме присвоить инпуту нужное значение? Или чем он поможет?

Автор: ksnk 16.7.2009, 01:27
Цитата(bars80080 @  15.7.2009,  22:55 Найти цитируемый пост)
 расширении ActiveX для ИЕ

Страничка не его. Доступа к файлам нету. Никакого smile 

Таких клиентов надо гнать. Такие задачи не надо решать, так как они не имеют решения, которое можно и нужно использовать в Web программировании. "Удаленная админка" - это скорее извращение, чем нормальная практика администрирования сайтов (imho, конечно)...

Автор: ksnk 16.7.2009, 01:55
O! Пришла в голову мысль. В FireFox есть механизм вставки дополнительных скриптов на страничку - плагин GeaseMonkey. C его помощью можно кардинально поменять загружаемую страничку, вставить туда все, что угодно, в том числе и флеш. 

Так что как альтернатива писанию приблуды на чуждом Дельфи или Вижуал С, можно написать его на JavaScript. Загрузчик, imho, вполне можно смастерить на JS, тамошний xmlHttp-Реквест может посылать и на разные домены, а вот выбор списка файлов списком пока еще не знаю, вероятно можно только флешем...

Этакая скрипт-админка...

Автор: Shabol 17.7.2009, 09:40
Как я удачненько сюда попал....
То что хочет автор - да было бы супер, но в браузере так не сделаешь...
у меня таже задача...
но проблема другая...
есть 
Код

<div id='img_area'></div>

Куда через JavaScript добавляются новые input
Код

 function Add_New_Images() {
    var elem = document.getElementById('img_area');
    if (elem) {
     CountImg=CountImg+1;
     elem.innerHTML = elem.innerHTML + "<input size='40' type='file' id='uf"+CountImg+"' name='uf"+CountImg+"'>";
    }
 }

Проблема в следующем:
Выбрал первый файл... нажал кнопу добавить еще... сработал скрипт выше... строк ввода уже две.. НО уже выбранные значения затираются...
как этого избежать?

Автор: Shabol 17.7.2009, 12:44
Вот что значит побыть в обществе умных людей)))))))))
Сам нашел решение:
Код


 function Add_New_Images() {
    var elem = document.getElementById('img_area');
    if (elem) {
     CountImg=CountImg+1;
     var newDiv = document.createElement("div");
     newDiv.innerHTML = "<input size='40' type='file' id='uf"+CountImg+"' name='uf"+CountImg+"'>";
     elem.appendChild(newDiv);
    }
 }


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)