клиент Google API c ++ — httpresponse Загруженные файлы повреждены в Windows NTFS

Следующий код C ++ может загружать файлы с диска Google

  ...
googleapis::StringPiece strpc = filePtr->get_download_url();
googleapis::client::HttpTransport* ptrHttp = service_->transport();
string filePath("C:/temp/"+filePtr->get_title().as_string());
googleapis::client::DataWriter *dataPtr = googleapis::client::NewFileDataWriter(filePath);
googleapis::client::HttpRequest *ptrHttpReq =
ptrHttp->NewHttpRequest(googleapis::client::HttpRequest::GET);
ptrHttpReq->set_url(strpc.as_string());
ptrHttpReq->set_content_writer(dataPtr);
ptrHttpReq->set_credential(&credential_);
googleapis::util::Status rsp = ptrHttpReq->Execute();
...

Но полученные файлы в локальном каталоге Windows NTFS повреждены (в основном, изображения). Похоже, классическая проблема EOL эмиссии CR LF проблема преобразования. Бинарное сравнение показывает, что «0A» заменяется на «0D 0A», а размеры файлов в локальных папках постоянно на 1 КБ больше, чем размер на диске.

У меня есть скриншот шестнадцатеричного дифференциала, прикрепленного здесь.введите описание изображения здесь

Эта проблема не возникает, когда я напрямую загружаю те же файлы с диска Google через их клиент браузера (щелкните правой кнопкой мыши> скачать)

Вот несколько файлов, размер которых постоянно отличается

  Downloaded               file size
bytes                    on disk (NTFS)
283374           --->    284427             delta of 1053
224201           --->    225025             delta of 824
248961           --->    249874             delta of 916
249438           --->    250413             delta of 975

Кроме того, размер буфера, сообщаемый DataWriter при записи, такой же, как сообщается в клиенте браузера через информацию о файле — поэтому полученная полезная нагрузка в ответе http равна размеру диска. Я полагаю, что проблема, вероятно, будет во время записи файла.

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

Похожая проблема сообщается здесь, в стеке потока, но я не вижу никаких изменений при попытке установить тип содержимого файла в объекте HttpRequest

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector