Динамически установить значение файла ввода

Есть ли способ установить значение файла ввода (<input type="file" />) или это все заблокировано для безопасности? Я пытаюсь использовать openFiles от Google gears, чтобы сделать простой мультизагрузчик.

Замечания:

Ответы ниже отражают состояние устаревших браузеров в 2009 году. Теперь вы можете фактически установить значение элемента ввода файла динамически / программно, используя JavaScript в 2017 году.

Подробности см. В ответе на этот вопрос, а также в демоверсии:
Как установить значение входного файла программно (например, при перетаскивании файлов)?

4 ответа

Решение

Невозможно динамически изменить значение поля файла, в противном случае вы можете установить его в "c:\yourfile" и очень легко красть файлы.

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

Возможно, взгляните на http://www.plupload.com/ - это очень гибкое решение для загрузки нескольких файлов, поддержка зон перетаскивания и т. Д.

Я работаю над угловым js-приложением и сталкиваюсь с подобной проблемой. Что я сделал, так это отобразил изображение из БД, затем создал кнопку для удаления или сохранения текущего изображения. Если пользователь решил сохранить текущее изображение, я изменил атрибут ng-submit на другую функцию, которая не требует проверки изображения, и обновил запись в БД, не касаясь исходного пути к изображению. Функция удаления изображения также изменила значение атрибута ng-submit обратно на функцию, которая отправляет форму и включает проверку изображения и загрузку. Также немного JavaScript, чтобы скользить в поле зрения, чтобы загрузить новое изображение.

Я закончил тем, что делал что-то подобное для AngularJS на тот случай, если кто-то наткнется на этот вопрос:

const imageElem = angular.element('#awardImg');

if (imageElem[0].files[0])
    vm.award.imageElem = imageElem;
    vm.award.image = imageElem[0].files[0];

А потом:

if (vm.award.imageElem)
    $('#awardImg').replaceWith(vm.award.imageElem);
    delete vm.award.imageElem;

У меня была похожая проблема, затем я попытался написать это из JavaScript, и это работает!: referenceToYourInputFile.value = "" ;

Другие вопросы по тегам