Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Скрипт для скачивания файлов в папку (https://javascript.ru/forum/misc/67380-skript-dlya-skachivaniya-fajjlov-v-papku.html)

Янковиц 14.02.2017 20:21

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

laimas 14.02.2017 22:48

Нет, но браузер запоминает папку в которую последний раз производилось скачивание, а также не проблема ее явно прописать в настройках браузера.

Paguo-86PK 14.02.2017 23:29

Кстaти, не раз сталкивался с подобной ситуацией.
Как, например, переменные MS-среды:
Microsoft Windows [Version 6.3.9600]
(c) Корпорация Майкрософт (Microsoft Corporation), 2013. Все права защищены.

C:\>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Paguo-86PK\AppData\Roaming
CARBON_MEM_DISABLE=1
CLASSPATH=.;C:\Program Files (x86)\Java\jre7\lib\ext\QTJava.zip
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
COMPUTERNAME=Paguo-86PK
ComSpec=C:\Windows\system32\cmd.exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
HOMEPATH=\Users\Paguo-86PK
LOCALAPPDATA=C:\Users\Paguo-86PK\AppData\Local
LOGONSERVER=\\Paguo-86PK
NUMBER_OF_PROCESSORS=64
OS=Windows_NT
Path=C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Program Files (x86)\Mercurial
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_ARCHITECTURE=AMD64
PROCESSOR_IDENTIFIER=AMD64 Family 21 Model 19 Stepping 1, AuthenticAMD
PROCESSOR_LEVEL=21
PROCESSOR_REVISION=1301
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)
ProgramW6432=C:\Program Files
PROMPT=$P$G
PSModulePath=C:\Windows\system32\WindowsPowerShell\v1.0\Modules\
PUBLIC=C:\Users\Public
QTJAVA=C:\Program Files (x86)\Java\jre7\lib\ext\QTJava.zip
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\Windows
TEMP=C:\Users\Paguo-~1\AppData\Local\Temp
TMP=C:\Users\Paguo-~1\AppData\Local\Temp
USERDOMAIN=Paguo-86PK
USERDOMAIN_ROAMINGPROFILE=Paguo-86PK
USERNAME=Paguo-86PK
USERPROFILE=C:\Users\Paguo-86PK
VS90COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\
windir=C:\Windows

P.S.: Рано или поздно, где-то это должны реализовать…
Ведь локальное хранилище раньше тоже ограничивалось несколькими килобайтами cookies:cray:

laimas 15.02.2017 06:28

Paguo-86PK,
а причем тут переменные среды?

Paguo-86PK 15.02.2017 14:45

Цитата:

Сообщение от laimas (Сообщение 444323)
Paguo-86PK,
а причем тут переменные среды?

Имелoсь ввиду мною та тренденция, что современный вэб-браузер давно по степени своей сложности и функциональности вырос практически в собственную операционную вэб-среду. Тем самым, давно в настройках браузеров пора добавить опции по выстановлению директорий под разные нужды активных скриптов на странице.

Например, мне очень не нравится то, что кнопка выбора файлов открывает окно обзора моей файловой системы. А файловые API скриптов имеют возможность доступа к ним.
Давно я обсуждал где-то идею такого API, где при обзоре файлов просто создаётся ярлык на него в папке сессии конкретной страницы. А в самом скрипте генерируется событие "изменение состава разделяемых медиа ресурсов" с кодом "добавлен файл" или "удалён".
А переменная, наряду с локальным storage-хранилищем, имеет соответствующую структуру (директории, файлы и т.д.).

P.S.: И скрипт может "дежурить" сутками…
Например, кликнул в папке по фото и выбрал "Отправить ...->Сессия Хроме (скрипт такой-то)", в нужную папку отправляется ярлык. Хром генерирует событие onfileshare в скрипте и тот что-то делает.
Или я опоздал?:-?

laimas 15.02.2017 15:06

Paguo-86PK,
а что мешает зайти в настройки браузера указать папку для сохранения или поведение браузера при открытии удаленного документа?

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

Если позволить сохранять файлы втихую, а клиентскому скрипту изменять настройки браузера, шастатать по переменным окружения и изменять их, то на системах всех пользователей будет создан портал легального проникновения на них удаленного пользователя. Так что молите бога, что хоть кто-то об этом думает. :)

Paguo-86PK 15.02.2017 15:25

Цитата:

Сообщение от laimas (Сообщение 444364)
Paguo-86PK,
а что мешает зайти в настройки браузера указать папку для сохранения или поведение браузера при открытии удаленного документа?

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

Если позволить сохранять файлы втихую, а клиентскому скрипту изменять настройки браузера, шастатать по переменным окружения и изменять их, то на системах всех пользователей будет создан портал легального проникновения на них удаленного пользователя. Так что молите бога, что хоть кто-то об этом думает. :)

Тaки безопасность и имеется мною ввиду.
В браузере указывается папка под сессии. В корне этой папке - файл конфигурации.
А когда очередной скрипт открывает файловую сессию, в ней создаётся папка этой сессии и в ней копятся ярлыки (читаемых) файлов и создаваемые скриптом файлы (с квотами на размер и тип).
P.S.: Или я свою позиция освещаю не так, или…

laimas 15.02.2017 15:29

Цитата:

Сообщение от Paguo-86PK
В браузере указывается папка под сессии. В корне этой папке - файл конфигурации.

Это не ваша забота как пользователя браузера, он и без вас с этим вполне справляется.

Paguo-86PK 15.02.2017 15:53

Этo я понял. Главное, что API вообще не имело функций управления реальной файловой системы:
var SSM_CallBack =
    function(
        event,  // код события
        files   // объект файловой системы
    ) {
        switch(event) {
        case files.EVENT.DELETE:
            while(files.EVENT.nodes.length) {
                var file = files.EVENT.nodes.shift();
                alert([
                    "Удаляется файл " + file.name,
                    "Время удаления " + file.Date.toString(),
                    "Размер файла " + file.size,
                    "Источник события " + files.EVENT.source.id
                ].join("\r\n"));
            }
            break;
        case files.EVENT.CREATE:
            while(files.EVENT.nodes.length) {
                var file = files.EVENT.nodes.shift();
                alert([
                    "Распространяется файл " + file.name,
                    "Время представления " + file.Date.toString(),
                    "Размер файла " + file.size,
                    "Источник события " + files.EVENT.source.id
                ].join("\r\n"));
            }
            break;
        }
    }

laimas 15.02.2017 16:25

Paguo-86PK,
если вы печетесь об умении браузера предоставлять пользователю работу с файловой системой, то в рамках HTML5 такое уже есть, но в рамках разумного, то есть отведено браузером место, там и хранение.

Вопрос же автора темы был иной, и того чего он хочет позволять нельзя, почему и так понятно.

Paguo-86PK 15.02.2017 16:31

Позволитe мне разъяснить в деталях суть персональной коцепции браузера?

Допустим, по-любому, браузеры имеют кэш под разные профайлы и сессии.
Когда заходим на какой-либо ресурс, загружаемая страница ресурса сохраняется в созданную временную собственную папку. В этой папке создаются поддиректории под коллекции стилей (папка style), изображений (папка img), скриптов и пр.
Допустим, я, как пользователь, зашёл в эту конкретную папку и подменил файл 76.gif поддиректории img, оперативно на экране браузера именно document.image[76] поменяет изображение на моё без перезагрузки страницы.
Также, объект файловой системы (моей концепции) имеет свою поддиректорию.
Например, у меня есть ssm.file["foo"] = {XY: "abc", XyZ: [1, 2, 3]}, который имеет файл foo.xml, где вся структура разворачивается в древовидную XML-структуру и её можно оперативно редактировать (сделать "снимок" текущего состояния переменной foo, скопировав, чтобы потом можно было восстановить (вставить в ресурс другой страницы) без повторной локальной генерации.

P.S. Кажется, я перемудрил и вы снова не так меня поймёте.

laimas 15.02.2017 16:49

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

Разработчики же, это иная категория, куда менее малочисленная, и для нее "в недрах" браузера и так не мало, а с выходом HTML5 еще и более стало. Этого мало? Ну так на здоровье - пишем для себя расширение под браузер и пользуемся на здоровье.

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

Янковиц 17.02.2017 11:58

Спасибо всем, кто ответил. Задача на первый взгляд не сложная, может подскажете в какую сторону копать. На сайте хочу реализовать возможность загрузки кистей для фотошопа|Gimp. И вместо того, чтобы скачивать, затем распаковывать архив, затем искать нужную папку с кистями, потом заливать в папку. Удобнее: нажал на кнопку, автоматически скачало в нужную папку (в зависимости от ОС), обновил список кистей и дальше поехал работать.


Часовой пояс GMT +3, время: 08:30.