Если JavaScript будет отключен, то Ваш клиентский код не будет работать так или иначе, таким образом, я предположу, что Вы подразумеваете желание той информации доступная серверная сторона. В этом случае noscript менее полезен. Вместо этого я имел бы скрытый вход и использовал бы JavaScript для заполнения значения. После того, как Ваш следующий запрос или обратная передача, если значение - там Вы, знают, что JavaScript включен.
остерегаться вещей как noscript, где первый запрос может показать JavaScript, отключенные, но будущие запросы включают его.
Здесь есть 2 проблемы
Как написать код.
Какой формат использовать.
Что касается формата файла, вы не можете использовать формат .ZIP, потому что .ZIP помещает оглавление в конец файла. Это означает, что вам придется загрузить весь файл, прежде чем вы сможете узнать, что в нем находится. Zip имеет заголовки, которые вы можете сканировать, но эти заголовки не являются официальным списком содержимого файла.
Zip явно помещает оглавление в конец, потому что это позволяет быстро добавлять файлы.
Предположим, у вас есть zip-файл, содержащий файлы 'a', 'b' и 'c'. Вы хотите обновить «c». В zip вполне допустимо читать оглавление, добавлять новый c, писать новое оглавление, указывающее на новый «c», но старый «c» все еще находится в файле. Если вы просканируете заголовки, вы в конечном итоге увидите старую 'c', поскольку она все еще находится в файле.
Эта функция добавления была явной целью дизайна zip. Это происходит из 1980-х, когда zip мог охватывать несколько дискет. Если вам нужно добавить файл, было бы отстойно читать все N дисков, чтобы перезаписать весь zip-файл. Таким образом, вместо этого формат просто позволяет вам добавлять обновленные файлы в конец, что означает, что ему нужен только последний диск. Он просто читает старый оглавление, добавляет новые файлы, записывает новый оглавление.
Сжатые tar-файлы не имеют этой проблемы. Tar-файлы хранятся в заголовке, файле, файле заголовка, и сжатие выполняется поверх этого, поэтому можно распаковывать загруженный файл и использовать файлы по мере их появления. http://o3d.googlecode.com
Код распаковки находится в o3d / import / cross / ...
Он нацелен на NPAPI с использованием некоторого клея, который можно найти в o3d / plugin / cross
Проверьте фильтры boost :: zlib . Они упрощают использование zlib .
Вот пример из документации по ускорению, которая распаковывает файл и записывает его в консоль:
#include <fstream>
#include <iostream>
#include <boost/iostreams/filtering_streambuf.hpp>
#include <boost/iostreams/copy.hpp>
#include <boost/iostreams/filter/zlib.hpp>
int main()
{
using namespace std;
ifstream file("hello.z", ios_base::in | ios_base::binary);
filtering_streambuf<input> in;
in.push(zlib_decompressor());
in.push(file);
boost::iostreams::copy(in, cout);
}
Конечно, zlib , например, использует z_stream для инкрементного сжатия и декомпрессии с помощью функций inflateInit, inflate, deflateInit, deflate. libzip2 имеет аналогичные возможности.
Для инкрементального извлечения из архива (когда он сжимается) посмотрите, например, старый добрый формат tar .