私はここで私の頭を失うことにかなり近づいています;)
gsoap を使ったサービスを開発しています。mime レスポンスを返したいと思います。私はすべてが機能していますが、バイナリファイルを読み取る場合、jpeg、pdfなどのすべての種類のファイルには\0
、データに数回 char が含まれています(メモ帳で開いた場合、多くの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++ がどのようにクレイジーなのか。
前もって感謝します。
retnickが以下に提案したように、私はこれを試しました
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 応答は実際のファイルよりも大きくなります...
デビッド・G・オルテガ