2012-08-11 2 views
0

POCO :: Net :: HTMLForm을 사용하여 appengine에 사진을 업로드하려고합니다. 아래 코드를 참조하십시오. 내가 가진 문제는 imagedata가 전송되지 않는다는 것입니다. 토큰과 문자 이름 (오픈 소스 액션 rpg의 경우)은 문제없이 전송됩니다. 내가 뭘 잘못했을지 모르겠다.Poco를 웹 서버에 사용하여 이미지 보내기

C++ 코드 : 사전에

감사 :에서 appengine에 대한

  // 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; 

파이썬 처리기 : 난 그렇게, imageData의 게시물 필드로 표시보다는 얻을 기대

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") 

답변

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); 

대응 업로드 서버

는 HTML 형식의 파일을 업로드 표준 PHP 코드를 사용 - 여기 그렇게하는 데 필요한 최소 코드입니다.

0

나는 imagedata = self.request.post("imagedata")을 시도 할 것입니다. 또는 서버에 게시하여 중단 점을 설정하고 요청의 내용을 검사 할 수 있습니다.