使用wxHTTP Post请求上传wxImage

时间:2014-04-16 22:13:36

标签: c++ wxwidgets

如何使用wxHTTP POST请求上传存储在wxImage或wxBitmap中的图像? 我知道我可以用某种方式做到:

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

但我刚开始使用cpp和wx。

2 个答案:

答案 0 :(得分:2)

你快到了。缺少的部分是一些实现wxOutputStream接口的类,然后您可以使用SetPostBuffer()方法发送其内容。

您可以查看wxOutputStream here的所有提供的实施。您似乎在寻找wxMemoryOutputStream

因此,完整的代码部分将是这样的:

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

答案 1 :(得分: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");