Winsock2 HTTP Postを使用してPNGファイルをアップロードしようとしています。ここに私の要求文字列です:C++ Winsock APIを使用したPNGファイル(HTTP POST)のアップロード
boundary = "-----rueldotme";
request += "POST " + uri + " HTTP/1.1\r\n";
request += "Host: " + hostname + "\r\n";
request += "User-Agent: " + UserAgent + "\r\n";
request += "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
request += "Accept-Language: en-us,en;q=0.5\r\n";
request += "Accept-Encoding: gzip,deflate\r\n";
request += "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n";
request += "Keep-Alive: 115\r\n";
request += "Connection: keep-alive\r\n";
request += "Content-Length: " + fileSize + "\r\n";
request += "Content-Type: multipart/form-data, boundary=" + boundary + "\r\n";
request += "\r\n";
request += "--" + boundary + "\r\n";
request += "Content-Disposition: form-data; name=\"filename\"; filename=\"" + fileName + "\"\r\n";
request += "Content-Type: image/png; charset=binary\r\n";
request += "Content-Transfer-Encoding: binary\r\n";
request += "\r\n";
request += "%s\r\n";
request += "\r\n";
接続がOKで、エラーなしとな、方法によってfileCon
がReadFile()
からです。エラーコードはありません。読み取られるバイト数は、GetFileSize()
の出力と同じです。私はfileCon
の内容を表示しようとしただけで、私にこれを与えた:
タイトル「エラー」(私はそれを設定)を気にしないでください。
また、要求には時間がかかり、空白の応答が返されます。うん、HTTPヘッダーのない空白。私は要求を正しくしていますか?私は本当にファイルの内容をPOSTデータに含める必要がありますか?
ありがとうございます。
EDIT:PNGサイズは約256KBです。私は1mbpsの接続になっています。
EDIT:情報が不十分でしたら申し訳ありません。
int flz;
char bdata[BSIZE];
DWORD dwe, bytesRead = 0;
HANDLE fh = CreateFile(fileName.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
LPVOID fbuff = NULL;
flz = GetFileSize(fh, NULL);
fbuff = malloc(flz);
ReadFile(fh, fbuff, flz, &bytesRead, NULL));
...
sprintf_s(bdata, BSIZE, request.c_str(), reinterpret_cast<char *>(fbuff)); //BSIZE = 1024
...
send(sock, bdata, std::strlen(bdata), 0);
私は問題がPNG画像ファイルの内容を読んでそこにあると思うかもしれません。 – Mahantesh
バイナリコンテンツをchar *に格納する必要があります。文字列には含まれません。 – Mahantesh
AFAIKは関係ありません。私のバッファに加えて、LPVOIDと私はstd :: stringに変換しました。私はそこに問題を見ません。 – Ruel