2014-04-16 62 views
0

如何用wxHTTP POST請求上傳存儲在wxImage或wxBitmap中的圖像? 我知道我能做到與它在某種程度上:用wxHTTP上傳wxImage發佈請求

wxImage::SaveFile (wxOutputStream &stream, wxBitmapType type) and 
wxHTTP::SetPostBuffer (const wxString &contentType, const wxMemoryBuffer &data) 

但我剛開始CPP的WX。

回答

2

你快到了。缺少的部分是一些實現wxOutputStream接口的類,然後可以使用SetPostBuffer()方法發送其內容。

您可以看到所有提供的實現wxOutputStreamhere。看來你正在尋找wxMemoryOutputStream。因此

完整的代碼部分將是這樣的:

wxMemoryOutputStream stream; 
if (!myImage.SaveFile(stream, wxBITMAP_TYPE_PNG)) 
    ;// TODO: Handle error 
SetPostBuffer("image/png", *stream.GetOutputStreamBuffer()); 
0

這是我做到了。有點更詳細,但減去錯誤檢查... 成員變量是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");