Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как создать архив в JS? (https://javascript.ru/forum/misc/2718-kak-sozdat-arkhiv-v-js.html)

Iron_Mind 04.02.2009 00:38

Как создать архив в JS?
 
Подскажите пожалуйста, каким образом можно "заставить" javaScript заархивировать файл или папку, назначить имя архиву и сохранить полученный архив в указанное место? Заранее благодарен всем ответитвшим!

Gvozd 04.02.2009 01:39

вы не уточнили, откуда надо брать файлы, и куда их архивировать:на сервере, или на клиенте.

В любом случае,для Браузерного JS, ответ: НИКАК!
вы не можете работать с файловой системой пользователя.
максимум что вы можетие - это попросить его отправить файл на сервер(при этом JS этот файл все равно не увидит)
Либо попросить сервер прислать какой-то файл в клиент(например тот же пересланный пользователем)
ко всему, что JS не умеет сам работать с файловой системой, у него нету встроенных средств архивации.ИБо не нужны

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

x-yuri 04.02.2009 09:00

можно и из браузера, если речь идет не о страничке сайта

Kolyaj 04.02.2009 09:05

Архиватор-то написать можно, все остальное от условий задачи зависит. Пример архиватора, создающего самораспаковывающийся архив http://dean.edwards.name/packer/

Gvozd 04.02.2009 14:02

x-yuri,
а можно поподробней, о том, что можно сделать из браузера по этому поводу?
и что из этого можно сделать не используя серверных скриптов.
Kolyaj,
я не думаю, что пакер-это то, что нужно человеку.
чудя по его посту его интересует именно создание "класических"архивов, которые можно было бы распаковать винраром например.
К тому же пакер, насколько помню перед пакованием урезает лишние пробелы каменты и прочее.этот подход не везде является допустимым

x-yuri 04.02.2009 14:12

Цитата:

а можно поподробней, о том, что можно сделать из браузера по этому поводу?
и что из этого можно сделать не используя серверных скриптов.
можно, например, работать с файловой системой в ie (http://msdn.microsoft.com/en-us/libr...f7(VS.85).aspx). Еще есть вероятность, что какой-нибудь архиватор предоставляет возможность управления собой через COM-интерфейс. Еще, возможно, можно получить доступ к объектам WSH. ))))

Kolyaj 04.02.2009 14:16

Цитата:

Сообщение от Gvozd
я не думаю, что пакер-это то, что нужно человеку.
чудя по его посту его интересует именно создание "класических"архивов, которые можно было бы распаковать винраром например.
К тому же пакер, насколько помню перед пакованием урезает лишние пробелы каменты и прочее.этот подход не везде является допустимым

Это пример архиватора, алгоритм которого похож на gzip. Разумеется он заточен под конкретную задачу.

Gvozd 04.02.2009 15:13

x-yuri,
именно поэтому ИЕ такой небезопасный)))
к WSH на нормальном уровне безопасности из осла доступа нет.
мне кажется сейчас в осле нельзя получить доступ к сторонним объектам через COM, при нормальном уровне безопасности.
в любом случае даже при разрешении всего выше головы не прыгнеш, и кроме того, что можно сделать в WSH из браузера не сделать.
так что использование этого решения не кросплатформенно.
А вообще, где топик-стартер?
Iron_Mind, скажите нам что вас конкретно надо сделать, и возможно тчо-то удастся сжделать.а возможно и нет

x-yuri 04.02.2009 15:23

Gvozd, я писал "можно и из браузера, если речь идет не о страничке сайта"

Gvozd 04.02.2009 16:32

x-yuri,
Сорри, не увидел.
в любом случае для этого надо использовать только один браузер, и с индивидуальными настройками безопасности

Iron_Mind 04.02.2009 22:39

Уточнение))
 
Цитата:

Сообщение от Gvozd (Сообщение 12045)
x-yuri,
именно поэтому ИЕ такой небезопасный)))
к WSH на нормальном уровне безопасности из осла доступа нет.
мне кажется сейчас в осле нельзя получить доступ к сторонним объектам через COM, при нормальном уровне безопасности.
в любом случае даже при разрешении всего выше головы не прыгнеш, и кроме того, что можно сделать в WSH из браузера не сделать.
так что использование этого решения не кросплатформенно.
А вообще, где топик-стартер?
Iron_Mind, скажите нам что вас конкретно надо сделать, и возможно тчо-то удастся сжделать.а возможно и нет

Ребята,спасибо за активную помощь! Так вот: просто что бы по запуску даблкликом по файлу 1.js он выполнил архивацию какого либо файла или папкии положил созданный архив в указанное место. В WinXp. Только и делов))

x-yuri 04.02.2009 22:43

это можно сделать средствами WSH. Единственная проблема, это как указать что надо архивировать и куда записывать. Это можно указать в командной строке.

Если же эти параметры фиксированы, то проблем не вижу. Правда для этого и cmd можно воспользоваться

Iron_Mind 04.02.2009 23:06

Еще уточнение)
 
Цитата:

Сообщение от x-yuri (Сообщение 12077)
это можно сделать средствами WSH. Единственная проблема, это как указать что надо архивировать и куда записывать. Это можно указать в командной строке.

Если же эти параметры фиксированы, то проблем не вижу. Правда для этого и cmd можно воспользоваться


А если надо запускать скрипт на разных компах, но на них всех 100% в определенном месте лежит нужная папка. Вот её то и надо в архив. Именно так чтобы принести или отправить скрипт, там запустят и создается архив в нужном месте. Такова точная тех.задача. Я просто новичок в JS, а сделать хочется))

Олег 04.02.2009 23:25

А насколько медленней работает js относительно исполняемых файлов не думали ?
Для простых файлов может и сработает, в виникспи есть еще html приложения (знатоки поправят как они точно называются, с помощью них иногда автораны для cd делают), они тоже на js пишутся, там как раз вроде есть классы для работы с файловой системой.
Самый простой путь написать архиватор - найти в сети уже написанные архиватор на php и используя файл php.js (есть такой в сети - там написаны функции,выполняемые php на js ) переделать его на js.

x-yuri 04.02.2009 23:27

почему бы средствами командной строки не обойтись? Ведь все равно к ней сведется? - создать cmd-файл
в cmd-файле это будет просто запуск архиватора с нужными ключами, на js будет то же самое + пара лишних команд

Kolyaj 04.02.2009 23:31

Олег,
Цитата:

Сообщение от Олег
А насколько медленней работает js относительно исполняемых файлов не думали ?

Цитата:

Сообщение от Олег
Самый простой путь написать архиватор - найти в сети уже написанные архиватор на php и используя файл php.js (есть такой в сети - там написаны функции,выполняемые php на js ) переделать его на js.

Это будет еще медленней.

Iron_Mind 04.02.2009 23:36

Цитата:

Сообщение от x-yuri (Сообщение 12082)
почему бы средствами командной строки не обойтись? Ведь все равно к ней сведется? - создать cmd-файл
в cmd-файле это будет просто запуск архиватора с нужными ключами, на js будет то же самое + пара лишних команд


У этого скрипта архивация - лишь первая часть, вторая часть например отправка этого архива или копирование и т.п. Вот в чем суть.. Вторая часть есть, осталось сделать арх. В принципе добавить больше нечего.

Gvozd 04.02.2009 23:43

предположу что на каждом из компьютеров установлен WInRAR.(мне неизветсны методы создания архивов средствами JS)
создайте файл с расширением *.bat
в нем запишите строчку
Код:

"C:\Program Files\WinRAR\rar" a C:\Downloads\1.rar C:\Downloads
где C:\Program Files\WinRAR\rar - путь к фрхиватору WinRar
C:\Downloads\1.rar - путь к создаваемому архиву
C:\Downloads - архивируемая папка.
каждый из путей, в котором есть пробелы(как у меня Program Files) надо записывать в двойных кавычках.

Двойной щелчок по получившемуся файлу откроет окно консоли, и после завершения процесса архивации завкроет.
Вуаля,JS для такой формы решения вашей задачи оказался не нужен.
JS может понадобится только, если вам НИ В КОЕМ случае нельзя выкидывать окно консоли, либо вам нужно некоторые параметры настраивать по мере выполнения(например пути), либо эта функция будет реализована в рамках другого кода на JS заточенного под WSH.
Вот решение этой же задачи в аналогичном виде на JS
var WSHShell = WScript.CreateObject("WScript.Shell");
WSHShell.Run('"C:\\Program Files\\WinRAR\\rar" a C:\\Downloads\\1.rar C:\\Downloads',0);

Коментарии те же, только добавляю что каждый символ \ надо экранировать(писать два раза вместо одного)

Iron_Mind 05.02.2009 00:00

Благодарность
 
Большое спасибо за ответы и терпение! )) Буду пробовать. Но у меня смутные чувства что я еще обращусь за советом)) Всего хорошего!

x-yuri 05.02.2009 00:02

Цитата:

У этого скрипта архивация - лишь первая часть, вторая часть например отправка этого архива или копирование и т.п. Вот в чем суть.. Вторая часть есть, осталось сделать арх. В принципе добавить больше нечего.
вторая часть не подразумевает выполнение в браузере?
Если все сделано в WSH, то можно в нем же и продолжать

Zibba 05.02.2009 00:08

А если это Unix то еще проще пишете обычный shell скрипт :) в 3 строки :)

Kolyaj 05.02.2009 00:26

Цитата:

Сообщение от Gvozd
мне неизветсны методы создания архивов средствами JS

http://www.lissyara.su/?id=1059
Дерзай :)

Gvozd 05.02.2009 01:04

Цитата:

Сообщение от Zibba
А если это Unix то еще проще пишете обычный shell скрипт в 3 строки

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

Zibba 05.02.2009 01:44

Gvozd,
Для меня просто дико, и интересно одновременно, то о чем Вы так часто говорите. Всякие WHD или как там :) . Самому просто приходится винду запускать только под виртуальной машиной и то для отладки скриптов под Осла и Хромого.

Олег 05.02.2009 01:49

Gvozd,
мне кажется, что если бы виндоус не было, придумали что нибудь другое, как она (например, макось поднялся бы, у которого M$ скопировали некоторое из интерфейса, про теперешнее заимствование технологий M$ типа канвы, XMLHttpRequest, CSS3 Web Fonts, opacity, text-shadow, Client-side Database Storage ..., которые были еще в 5м эксплорере это другой разговор ... ), в ней главное - это простота использования, незачем что-то изучать, придумывать - просто взял и сделал что нужно с помощью щелчка мыши. Ведь, на рынке обычно два крупных конкурента, и, 3й догоняющий первых 2, и несколько отстающих, это как гугл и яндекс, одноклассники и вконтакте, да можно много примеров привести ....
Множество элементарных вопросов всегда будет - ведь народ учиться, ему проще написать пару строк и немного подождать пока ему все объяснят и преподнесут те, кому охото показать свои знания, помочь кому-то, пообщаться или поддержать ресурс, чем сидеть и долго вникать в проблему.

Андрей Параничев 05.02.2009 01:59

Zibba,
Windows Script Host это два интерпретатора для JScript (и VBScript) - один имеет оконный интерфейс (wscript.exe), другой - консольный (cscript.exe). По сути, если в windows создать файл с расширением .js и открыть его двойным кликом, то он будет выполнен интерпретатором wscript.exe. Исполняемые скрипты имеют доступ через ActiveX к объектам системы, с помощью которых они могут управлять реестром, файловой системой и делать другие интересные вещи.

Zibba 05.02.2009 02:08

Андрей Параничев,
Спасибо за развернутый ответ. Я себе это прмерно и представлял как набор объектов, расширяющих возможности системы, доступных из Майкрософтовской реализации JS.

Андрей Параничев 05.02.2009 02:20

Zibba,
Ну объекты есть и без WSH, они доступны практически из любого языка (в качестве OLE или ActiveX). Кстати тот интерпретатор, что работает в браузере Internet Explorer, и тот, что находится в составе WSH - разные вещи, хотя синтаксис JScript в обоих случаях одинаковый.

Добавлено:
А может один и тот же, на "низком" уровне, но в WSH он запускается через ActiveX, опять же. В общем, на счет этого я не уверен. Но в HTA (HTML Application) похоже используется WSH.

Gvozd 05.02.2009 02:50

Zibba,
честно говря. я готов преклонить колени перед вами в связи с выбором вашей десктопной системы
Олег,
примерно шестая счать осей UNIX-based не сложенее а проще, для ежедневного использования простым пользователем чем винда, при условии, что это первая его система.НО винда лучше прорекламирована в данный момент.
посему трудно представить что было бы без нее, наверняка
Андрей Параничев,
WSH предусматривает два интепритатора для упомянутых вами языков, и возможность добавления новых.
я читал доки, где утверждалось, что в качестве WSH можно использовать например Perl, при по мощи определенных манипуляция с системой.сам такого не делал
Цитата:

Сообщение от Андрей Параничев
А может один и тот же, на "низком" уровне, но в WSH он запускается через ActiveX, опять же

На сколько я могу судить в WSH используется тоже ядро для интеперетации JScript-a
Просто набор объектов доступных на старте программы отличается немного(в юраузере есть window, и document.в WSH есть WScript)
Опытов с HTA я почти не проводил, и не в курсе есть ли там этот объект.
Вот в браузере точно его нету
---------------------------------------------------------
Извиняюсь перед всеми кто вынужден был прочитать мой пост до редактирования.
был экспресивен и резок.+куча опечаток.И вообще.

Андрей Параничев 05.02.2009 03:07

Gvozd,
Боже, сколько опечаток.

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


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