Распаковка и извлечение файлов от потоковой передачи архива на лету

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

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

6
задан GhassanPL 21 July 2009 в 15:46
поделиться

3 ответа

Здесь есть 2 проблемы

  1. Как написать код.

  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

6
ответ дан 8 December 2019 в 18:39
поделиться

Проверьте фильтры 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);
}
5
ответ дан 8 December 2019 в 18:39
поделиться

Конечно, zlib , например, использует z_stream для инкрементного сжатия и декомпрессии с помощью функций inflateInit, inflate, deflateInit, deflate. libzip2 имеет аналогичные возможности.

Для инкрементального извлечения из архива (когда он сжимается) посмотрите, например, старый добрый формат tar .

2
ответ дан 8 December 2019 в 18:39
поделиться
Другие вопросы по тегам:

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