如何用wxHTTP POST請求上傳存儲在wxImage或wxBitmap中的圖像? 我知道我能做到與它在某種程度上:用wxHTTP上傳wxImage發佈請求
wxImage::SaveFile (wxOutputStream &stream, wxBitmapType type) and
wxHTTP::SetPostBuffer (const wxString &contentType, const wxMemoryBuffer &data)
但我剛開始CPP的WX。
如何用wxHTTP POST請求上傳存儲在wxImage或wxBitmap中的圖像? 我知道我能做到與它在某種程度上:用wxHTTP上傳wxImage發佈請求
wxImage::SaveFile (wxOutputStream &stream, wxBitmapType type) and
wxHTTP::SetPostBuffer (const wxString &contentType, const wxMemoryBuffer &data)
但我剛開始CPP的WX。
你快到了。缺少的部分是一些實現wxOutputStream
接口的類,然後可以使用SetPostBuffer()
方法發送其內容。
您可以看到所有提供的實現wxOutputStream
here。看來你正在尋找wxMemoryOutputStream
。因此
完整的代碼部分將是這樣的:
wxMemoryOutputStream stream;
if (!myImage.SaveFile(stream, wxBITMAP_TYPE_PNG))
;// TODO: Handle error
SetPostBuffer("image/png", *stream.GetOutputStreamBuffer());
這是我做到了。有點更詳細,但減去錯誤檢查... 成員變量是wxURLs。
// ok now read the data into a buffer again
wxMemoryBuffer buf;
{
// don't have charBuf around for too long
wxFile f(someFileName);
char charBuf[f.Length()];
f.Read(charBuf, f.Length());
buf.AppendData(charBuf, f.Length());
}
// upload!
wxHTTP post;
post.SetPostBuffer("application/gzip", buf);
post.Connect(mDestUrl.GetServer()):
wxInputStream *iStream = post.GetInputStream(mDestUrl.GetPath() + "?" + mDestUrl.GetQuery());
// put result into stream
wxString res;
wxStringOutputStream oStream(&res);
iStream->Read(oStream);
wxLogDebug(TAG " server replied: " + res);
請注意,wxHttp不會執行分段上傳。例如,在PHP中,您可以通過以下方式訪問數據:
$postdata = file_get_contents("php://input");