Загрузка файла с уникальными ограничениями - PullRequest
0 голосов
/ 29 мая 2010

Я ищу простой способ загрузки файла, но, к сожалению, с набором уникальных ограничений:

  1. У меня есть обработчик событий для нажатия кнопки. В этом обработчике событий я хотел бы сделать какой-нибудь вызов, чтобы открыть диалоговое окно «Browse for File» (которое является собственным окном OpenFileDialog). Пользователи будут перемещаться и выбирать файл для загрузки. После того, как пользователи нажмут кнопку ОК, на сервер будет отправлен запрос на публикацию.

  2. Когда почтовый запрос попадает на сервер, полное имя файла (т. Е. С полным путем) находится в одном из параметров почтового запроса.

  3. Я предпочитаю не иметь форму (по крайней мере, не явно, динамически и временно генерируется в iframe или что-то в порядке). В моем HTML нет элемента, и Flash не разрешен, поэтому что-то вроде Uploadify не может рассматриваться. Ajax Upload (http://valums.com/ajax-upload/) также не может рассматриваться, поскольку он хочет, чтобы элемент уже существовал в DOM. С другой стороны, я хочу обработать загрузку, как только обработчик события вступит в действие.

  4. Индикатор выполнения, загрузка нескольких файлов НЕ требуется.

Ответы [ 3 ]

0 голосов
/ 29 мая 2010

Вы не можете сделать это только с JS + HTML. Вам понадобится хотя бы что-то вроде Flash, Silverlight или Java.

0 голосов
/ 29 августа 2016

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

// this is callback function
var file = document.createElement('input');
file.setAttribute('type', 'file');

// bind change event.
file.onchange = function () {
    // see step second.
}
file.click();

Затем ajax загрузите файл. Используйте iframe, formData или любые другие плагины, как вам нравится.

var formData = new FormData();
formData.append('upfile', this.files[0]);

Остальное можно погуглить.

0 голосов
/ 29 мая 2010

Просто создайте элемент динамически внутри обработчика и после этого используйте AjaxUpload.

...