Я очень близок к тому, чтобы потерять голову здесь;)
Я разрабатываю сервис, который использует gsoap. Я хотел бы вернуть ответ пантомимы.
У меня все работает, но при чтении бинарных файлов все виды файлов, такие как jpeg, pdf и т. Д. ... содержат символ \0
несколько раз над данными (при открытии в блокноте можно увидеть много NUL
).
Таким образом, любой код для чтения необработанного файла терпит неудачу, как только он находит символ конца файла. Я попытался заменить \0
, но файл стал отображаться неправильно.
Я также попробовал несколько методов, включая пример, который поставляется с gsoap.
Так возобновляется,
Общий код fstream не работает.
for (i = 0; i < MAX_FILE_SIZE; i++)
{ if ((c = fgetc(fd)) == EOF)
break;
image.__ptr[i] = c;
}
тоже не работает
QFile::ReadAll
работает, но при преобразовании QString
в char*
массив обрезается в первом NUL
.
Итак, как лучше всего читать весь двоичный файл? Это безумие, как иногда C ++ в основном.
Заранее спасибо.
Я пробовал это, как предложено ниже,
UrlToPdf urlToPdf;
urlToPdf.getUrl(&input, &result);
QByteArray raw = urlToPdf.getPdf(QString(result.data.c_str()));
int size = raw.toBase64().size();
char* arraydata = new char[size];
strcpy(arraydata, raw.toBase64().data());
soap_set_mime(this, "MIME_boundary", NULL);
if(soap_set_mime_attachment(this, arraydata, size, SOAP_MIME_BASE64, "application/pdf", NULL, NULL, NULL))
{
soap_clr_mime(this);
soapMessage = this->error;
}
но не повезло ... ответ MIME больше, чем фактический файл ...
Дэвид Г Ортега