Создайте локальную файловую систему, просматривая webapp [duplicate]

Я думаю, вы упустили, чтобы проинструктировать весну для сканирования классов с аннотацией.

Вы можете использовать @ComponentScan("packageToScan") в классе конфигурации вашего весеннего приложения, чтобы проинструктировать весну для сканирования.

@Service, @Component и т. д. аннотации добавляют мета-описание.

Spring только вводит экземпляры тех классов, которые либо создаются как bean-элементы, либо помечены аннотацией.

Классы, отмеченные аннотацией, должны быть идентифицированы весной перед инъекцией, @ComponentScan указать весну найдите классы, отмеченные аннотацией. Когда Spring находит @Autowired, он ищет связанный компонент и вставляет требуемый экземпляр.

Добавление только аннотации, не исправляет или облегчает инъекцию зависимостей, Spring должна знать, где искать.

141
задан Preet Sangha 15 April 2011 в 10:27
поделиться

11 ответов

Если пользователь выбирает файл через <input type="file">, вы можете читать и процесс с помощью файла File API .

Чтение или запись произвольных файлов не допускается по дизайну. Это нарушение песочницы. Из Wikipedia -> Javascript -> Безопасность :

JavaScript и DOM предоставляют злоумышленникам возможность запускать сценарии для запуска на клиентском компьютере через Интернет. Авторы браузера содержат этот риск, используя два ограничения. Во-первых, скрипты выполняются в изолированной среде, в которой они могут выполнять только действия, связанные с веб-сайтом, а не задачи общего назначения, такие как создание файлов.

2016 UPDATE: доступ к файловой системе напрямую возможен через API файловой системы , который , поддерживаемый только Chrome и Opera и , может не реализоваться другими браузерами (с исключением Край ). Подробнее см. ответ Кевина .

73
ответ дан Community 22 August 2018 в 16:21
поделиться
  • 1
    Черт. Это глупо, конечно. Javascript, предположительно, является языком-агностиком для приложений. Не каждое приложение представляет собой веб-браузер. Я пришел сюда, потому что, например, меня интересует сценарий Photoshop. Даже если некоторые приложения не предоставляют классы доступа к файлам, имеет смысл стандартизировать их для тех приложений, где они подходят - стандартная, но необязательная функция, поэтому опыт работы с одним приложением можно передавать, даже если это не универсально. То, что я изучаю в Photoshop, не будет переносимым даже на другие хосты Javascript, которые разрешают доступ к файлам. – Steve314 12 June 2010 в 23:28
  • 2
    Javascript язык и делать то, что позволяет хостинг-среде. SpiderMonkey может делать все, что может сделать любой другой язык. Javascript в браузере изолирован. – feeling unwelcome 26 April 2011 в 23:09
  • 3
    Этот ответ, возможно, был правильным 3 года назад, но это, безусловно, не так. См. Ответ @Horst Walter на HTML5. Или перейдите сюда: html5rocks.com/en/tutorials/file/dndfiles – james.garriss 2 December 2011 в 15:41
  • 4
    @ james.garriss Да, на самом деле это было не слишком правильно три года назад. Эта страница научила меня читать / писать с Firefox еще в 2003 году web.archive.org/web/20031229011919/http://www.captain.at/… (bulit для XUL, но доступный в браузер с XpCom), а в Microsoft были сценарии оболочки javscript в стиле node.js в 1990-х годах (и FileIO, доступный в браузере с ActiveX) – Charlesism 12 October 2013 в 14:17
  • 5
    Невозможно больше – SysDragon 7 May 2015 в 06:40

Просто обновление функций HTML5 http://www.html5rocks.com/en/tutorials/file/dndfiles/ Эта замечательная статья объяснит детализация доступа к локальному файлу в Javascript. Резюме из упомянутой статьи:

Спецификация предоставляет несколько интерфейсов для доступа к файлам из «локальной» файловой системы :

  1. Файл - отдельный файл ; предоставляет информацию только для чтения, такую ​​как имя, размер файла, тип mimetype и ссылку на дескриптор файла.
  2. FileList - массивная последовательность объектов File. (Подумайте, <input type="file" multiple> или перетащить каталог файлов с рабочего стола).
  3. Blob - Позволяет разрезать файл на байтовые диапазоны.

- Изменить -

См. комментарий Пола Д. Уэйта ниже

155
ответ дан Horst Walter 22 August 2018 в 16:21
поделиться
  • 1
    Это не совсем настоящая файловая система, как то, что мы используем в Java или Flash-плагине. Например, мы не можем перечислить файлы на рабочем столе пользователя, если он сам не выбирает их самостоятельно. – Pacerier 1 May 2014 в 21:36
  • 2
    Похоже, что эти API заброшены: см. w3.org/TR/file-writer-api и html5rocks.com/en/tutorials/file/filesystem – Paul D. Waite 23 May 2014 в 14:49
  • 3
    Осторожно, учитывая форму W3C для выхватывания полезных технологий. Файловая система api, реализованная только в хроме, не продвигается вперед. Файл file api, имеет универсальную поддержку , принимается как рабочий проект w3c , и мы не можем больше представить себе жизнь без нее. Конечно, мы все еще в браузере, и нам нужно подождать, пока пользователь не принесет нам файл, но это значительно расширяет возможности веб-приложений и не уходит в ближайшее время. – bbsimonbb 2 December 2015 в 10:42

NW.js позволяет создавать настольные приложения с использованием Javascript без всех ограничений безопасности, обычно размещаемых в браузере. Таким образом, вы можете запускать исполняемые файлы с помощью функции или создавать / редактировать / читать / писать / удалять файлы. Вы можете получить доступ к аппаратным средствам, таким как текущее использование ЦП или общий барабан, и т. Д.

Вы можете создать приложение для Windows, Linux или Mac, которое не требует установки.

Вот структура для NW.js, Universal GUI:

8
ответ дан Jaredcheeda 22 August 2018 в 16:21
поделиться
  • 1
    Также можно получить доступ к локальным файлам, используя Electron , что является аналогичной основой для настольных приложений JavaScript. – Anderson Green 4 June 2018 в 20:35

Как уже упоминалось ранее, API-интерфейсы FileSystem и File , а также API FileWriter могут использоваться для чтения и записи файлов из контекст вкладки / окна браузера на клиентскую машину.

Существует несколько вещей, относящихся к API-интерфейсам FileSystem и FileWriter, о которых вы должны знать, некоторые из которых были упомянуты, но заслуживают повторения:

  • Реализации API в настоящее время существуют только в браузерах на основе хрома (Chrome & amp; Opera)
  • Оба API были сняты со стандартного трека W3C 24 апреля 2014 года , и на данный момент являются собственностью
  • . Удаление (теперь запатентованных) API-интерфейсов от реализации браузеров в будущем - это возможность
  • Песочница (местоположение на диске, за пределами которого файлы могут не производят никакого эффекта) используется для хранения файлов, созданных с помощью API.
  • Виртуальная файловая система (структура каталогов, которая необязательно существует на диске в той же форме, что и при доступе от в браузере) используются файлы, созданные с помощью API-интерфейсов

. Вот простые примеры того, как API-интерфейсы используются, прямо или косвенно, в тандеме для выполнения следующих действий:

BakedGoods *

Запись файла:

bakedGoods.set({
    data: [{key: "testFile", value: "Hello world!", dataFormat: "text/plain"}],
    storageTypes: ["fileSystem"],
    options: {fileSystem:{storageType: Window.PERSISTENT}},
    complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});

Чтение файла:

bakedGoods.get({
        data: ["testFile"],
        storageTypes: ["fileSystem"],
        options: {fileSystem:{storageType: Window.PERSISTENT}},
        complete: function(resultDataObj, byStorageTypeErrorObj){}
});

Использование необработанного файла, FileWriter и API FileSystem

Запись файла:

function onQuotaRequestSuccess(grantedQuota)
{

    function saveFile(directoryEntry)
    {

        function createFileWriter(fileEntry)
        {

            function write(fileWriter)
            {
                var dataBlob = new Blob(["Hello world!"], {type: "text/plain"});
                fileWriter.write(dataBlob);              
            }

            fileEntry.createWriter(write);
        }

        directoryEntry.getFile(
            "testFile", 
            {create: true, exclusive: true},
            createFileWriter
        );
    }

    requestFileSystem(Window.PERSISTENT, grantedQuota, saveFile);
}

var desiredQuota = 1024 * 1024 * 1024;
var quotaManagementObj = navigator.webkitPersistentStorage;
quotaManagementObj.requestQuota(desiredQuota, onQuotaRequestSuccess);

Файл чтения:

function onQuotaRequestSuccess(grantedQuota)
{

    function getfile(directoryEntry)
    {

        function readFile(fileEntry)
        {

            function read(file)
            {
                var fileReader = new FileReader();

                fileReader.onload = function(){var fileData = fileReader.result};
                fileReader.readAsText(file);             
            }

            fileEntry.file(read);
        }

        directoryEntry.getFile(
            "testFile", 
            {create: false},
            readFile
        );
    }

    requestFileSystem(Window.PERSISTENT, grantedQuota, getFile);
}

var desiredQuota = 1024 * 1024 * 1024;
var quotaManagementObj = navigator.webkitPersistentStorage;
quotaManagementObj.requestQuota(desiredQuota, onQuotaRequestSuccess);

Хотя API-интерфейсы FileSystem и FileWriter больше не соответствуют стандартам трек, их использование может быть оправдано в некоторых случаях, на мой взгляд, потому что:

  • Возобновленный интерес у недействующих поставщиков браузеров может вернуть их обратно на него
  • Рыночное проникновение внедряющих (на основе хромовых) браузеров велико
  • . Google (главный вклад в Chromium) не дал и не закончил API API

Однако, если «некоторые случаи» охватывают ваши собственные, вы должны решить.

* BakedGoods поддерживается не кем иным, как парень прямо здесь:)

17
ответ дан Kevin 22 August 2018 в 16:21
поделиться

FSO.js обертывает новый API-интерфейс HTML5 FileSystem, который стандартизован W3C и предоставляет чрезвычайно простой способ читать, записывать или перемещать локальную изолированную Файловая система. Это асинхронно, поэтому файл IO не будет мешать работе пользователя. :) [/ Д2]

3
ответ дан kwh 22 August 2018 в 16:21
поделиться
  • 1
    FSO.js в настоящее время не поддерживается IE, Mozilla или Safari. – Phillip Senn 25 April 2016 в 15:04

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

Основная идея решения: javascript не может получить доступ к файлу, указав его локальный URL. но он может использовать файл, имея его DataURL: поэтому, если пользователь просматривает файл и открывает его, js должен получить «DataURL» непосредственно из HTML вместо получения «URL».

Затем он превращает DataURL в файл, используя функцию readAsDataURL и объект FileReader. источник и более полное руководство с хорошим примером:

https://developer.mozilla.org/en-US/docs/Web/API/FileReader?redirectlocale=en-US&redirectslug = DOM% 2FFileReader

1
ответ дан Makan Tayebi 22 August 2018 в 16:21
поделиться

, если вы используете angularjs & amp; aspnet / mvc, чтобы получить json-файлы, вы должны разрешить тип mime в web config

<staticContent>
    <remove fileExtension=".json" />
    <mimeMap fileExtension=".json" mimeType="application/json" />
  </staticContent>
-4
ответ дан Mohamed.Abdo 22 August 2018 в 16:21
поделиться

UPDATE Эта функция удаляется с Firefox 17 (см. https://bugzilla.mozilla.org/show_bug.cgi?id=546848 ).


Вкл. Firefox, который вы (программист) может сделать это из файла JavaScript:

netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite");

, и вам (пользователю браузера) будет предложено разрешить доступ. (для Firefox вам просто нужно делать это один раз при каждом запуске браузера)

Если пользователь браузера - кто-то другой, они должны предоставить разрешение.

20
ответ дан Muntashir Akon 22 August 2018 в 16:21
поделиться
  • 1
    Это дает ошибку, что она устарела, и вы можете сделать это только в расширении, а не на сайте javascript – Esailija 29 November 2012 в 13:39
  • 2
    как показывает эта ссылка, эта функция была удалена в более поздних версиях firefox. support.mozilla.org/en-US/questions/944433 – Makan Tayebi 6 June 2013 в 13:09
  • 3
    о, это отстой. Я получаю безопасность и все такое, но нам нужен способ предоставления доверия для запуска собственных файлов javascript локально. – Jason S 6 June 2013 в 14:25
  • 4
    конечно. и я еще не нашел другого способа сделать это. – Makan Tayebi 6 June 2013 в 15:32
  • 5
    Обновите ответ, чтобы показать, что он устарел. Благодарю. – jpaugh 4 June 2015 в 23:36

Если у вас есть поле ввода, например

<input type="file" id="file" name="file" onchange="add(event)"/>

Вы можете получить файл в формате BLOB:

function add(event){
  var userFile = document.getElementById('file');
  userFile.src = URL.createObjectURL(event.target.files[0]);
  var data = userFile.src;
}
3
ответ дан Radek Mezuláník 22 August 2018 в 16:21
поделиться

Если вы развертываете в Windows, узел сценария Windows предлагает очень полезный JScript API для файловой системы и других локальных ресурсов. Однако включение сценариев WSH в локальное веб-приложение может быть не таким элегантным, как вы могли бы пожелать.

6
ответ дан Traphicone 22 August 2018 в 16:21
поделиться
  • 1
    Я хотел бы, чтобы решение было независимым от os (по крайней мере, между окнами и mac), поэтому хост Windows-скрипта не удовлетворяет его, если нет сопоставимого решения для платформы mac – Jared 16 December 2008 в 18:59

Если вам нужен доступ ко всей файловой системе на клиенте, чтение / запись файлов, просмотр папок для изменений, запуск приложений, шифрование или подписывание документов и т. д., пожалуйста, посмотрите на JSFS.

Это позволяет безопасный и неограниченный доступ с вашей веб-страницы к ресурсам компьютера на клиенте без использования технологии плагина браузера, такой как AcitveX или Java Applet. Тем не менее, мир программного обеспечения также должен быть установлен.

Для работы с JSFS вы должны иметь базовые знания в разработке Java и Java EE (сервлеты).

Пожалуйста, найдите JSFS здесь: https://github.com/jsfsproject/jsfs . Это бесплатно и лицензировано в GPL

2
ответ дан wimix 22 August 2018 в 16:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: