Я пытаюсь распаковать zip-файл из сети, как показано здесь .
Сбой с ошибкой:
Decompress error CRC mismatch. Corrupt file: ...
Но если я напишу ответ сервера во временный zip-файл и разархивирую его, он отлично работает. Что я делаю не так?
Рабочий код:
Poco::URI uri(host_);
HTTPClientSession session(uri.getHost(), uri.getPort());
HTTPRequest req(HTTPRequest::HTTP_GET, "/" + path_, HTTPMessage::HTTP_1_1);
req.setChunkedTransferEncoding(true);
session.sendRequest(req);
HTTPResponse res;
std::istream& rs = session.receiveResponse(res);
{
std::ofstream tmpOs("./tmp.zip");
std::copy(std::istreambuf_iterator<char>(rs), std::istreambuf_iterator<char>(),
std::ostream_iterator<char>(tmpOs));
}
std::ifstream tmp("./tmp.zip");
Decompress dec(tmp, Poco::Path());
dec.EError += Poco::Delegate<SharingServiceDownloader, std::pair<const Poco::Zip::ZipLocalFileHeader, const std::string> >(this, &SharingServiceDownloader::onDecompressError);
dec.decompressAllFiles();
dec.EError -= Poco::Delegate<SharingServiceDownloader, std::pair<const Poco::Zip::ZipLocalFileHeader, const std::string> >(this, &SharingServiceDownloader::onDecompressError);
Сбой с ошибкой:
Poco::URI uri(host_);
HTTPClientSession session(uri.getHost(), uri.getPort());
HTTPRequest req(HTTPRequest::HTTP_GET, "/" + path_, HTTPMessage::HTTP_1_1);
req.setChunkedTransferEncoding(true);
session.sendRequest(req);
HTTPResponse res;
std::istream& rs = session.receiveResponse(res);
Decompress dec(rs, Poco::Path());
dec.EError += Poco::Delegate<SharingServiceDownloader, std::pair<const Poco::Zip::ZipLocalFileHeader, const std::string> >(this, &SharingServiceDownloader::onDecompressError);
dec.decompressAllFiles();
dec.EError -= Poco::Delegate<SharingServiceDownloader, std::pair<const Poco::Zip::ZipLocalFileHeader, const std::string> >(this, &SharingServiceDownloader::onDecompressError);
Следует отметить, что я использую chunked-кодировку на моей стороне сервера.