0

我正在尝试使用 POCO::Net::HTMLForm 将图片上传到 appengine。请看下面的代码。我遇到的问题是图像数据没有发送。令牌和角色名称(其用于开源动作 rpg)传输没有任何问题。知道我可能做错什么吗?

提前致谢 :)

C++代码:

            // prepare session
        Poco::URI uri(backend_url + "/api/update_character_avatar");
        Poco::Net::HTTPClientSession session(uri.getHost(), uri.getPort());

        // prepare path
        std::string path(uri.getPathAndQuery());
        if (path.empty()) path = "/";

        Poco::Net::HTTPRequest req(Poco::Net::HTTPRequest::HTTP_POST, path);
        Poco::Net::HTMLForm form;
        form.add("token", sw_token);
        form.add("charname", sw_charname);

        Poco::Buffer<char> imgBuffer(mImgPtr->size());
        mImgPtr->read(imgBuffer.begin(), imgBuffer.end()-imgBuffer.begin());
        std::string s(imgBuffer.begin(), mImgPtr->size());

        std::ostringstream out;
        Poco::Base64Encoder b64enc(out);
        b64enc.write(imgBuffer.begin(), imgBuffer.end()-imgBuffer.begin());
        b64enc.close();
        Poco::Net::StringPartSource *prtsrc = new Poco::Net::StringPartSource(out.str());
        form.addPart("imagedata", prtsrc);

        form.prepareSubmit(req);
        std::ostream& send = session.sendRequest(req);
        form.write(send);

        // get response
        Poco::Net::HTTPResponse res;

        // print response
        std::istream &is = session.receiveResponse(res);
        std::ostringstream stream;
        Poco::StreamCopier::copyStream(is, stream);
        std::cout << stream.str() << std::endl;

应用引擎的 Python 处理程序:

class UpdateCharacterAvatarHandler(webapp2.RequestHandler):
def post(self):
    token = self.request.get("token")
    charname = self.request.get("charname")
    imagedata = self.request.get("imagedata")

    logging.error(self.request.body)

    self.response.write("test")
4

2 回答 2

0

我希望 imagedata 显示为 post 字段而不是 get,所以我会尝试     imagedata = self.request.post("imagedata"). 或者尝试将其发布到允许您设置断点并检查请求内容的服务器。

于 2012-09-30T20:25:24.020 回答
0

抱歉,我无法理解您在这段代码中到底想做什么。您已经采取了许多无用的步骤来上传文件,因为只需使用 HTMLForm 类即可完成。这是执行此操作所需的最少代码 -

    HTTPRequest request(HTTPRequest::HTTP_POST, "/fileupload/upload_file.php",    HTTPMessage::HTTP_1_1);
    HTMLForm form;
    form.setEncoding(HTMLForm::ENCODING_MULTIPART);
    form.addPart("file", new FilePartSource("/home/abc/Pictures/sample.png"));
    form.prepareSubmit(request);

    HTTPClientSession *httpSession = new HTTPClientSession("localhost");
    httpSession->setTimeout(Poco::Timespan(20, 0));
    form.write(httpSession->sendRequest(request));        

    Poco::Net::HTTPResponse res;
    std::istream &is = httpSession->receiveResponse(res);
    Poco::StreamCopier::copyStream(is, std::cout);

相应的上传服务器使用标准 PHP 代码上传 HTML 表单文件。

于 2014-02-06T11:47:17.573 回答