2012-12-20 21 views
5

में पॉको का उपयोग कर वेबर पर छवि अपलोड करने के लिए कैसे मैं दूरस्थ वेब सर्वर पर एक छवि अपलोड करने की कोशिश कर रहा हूं। मैंने HTMLForm और FilePartSource का उपयोग किया है। मैं स्थानीय सेवर (यानी loclhost) पर छवि को सफलतापूर्वक अपलोड करने में सक्षम हूं लेकिन जब मैं इसे दूरस्थ सर्वर में अपलोड करने का प्रयास करता हूं, तो दूरस्थ वेब सर्वर से प्राप्त प्रतिक्रिया "411 लंबाई आवश्यक" होती है। मैंने request.setContentLength (sizeofimagefile) सेट करने का प्रयास किया लेकिन फिर भी एक ही समस्या है। क्या कोई मुझे इस मुद्दे पर मार्गदर्शन कर सकता है या नहीं। यहां मेरा कोड है।पीओसीओ: सी ++

HTMLForm htmlform; 
htmlform.set("aaaaaa", "bbbbbbb"); 
htmlform.set("cccccc", "ddddddd"); 
htmlform.setEncoding(HTMLForm::ENCODING_MULTIPART); 

PartSource * pFileSrc = new FilePartSource("filename", "application/octet-stream"); 

std::istream& mystream = pFileSrc->stream(); 
mystream.seekg(0, std::ios::end); 
int uiLength = mystream.tellg(); 

    htmlform.addPart("file", pFileSrc); 

URI uri("yyy"); 

    HTTPClientSession session(uri.getHost(), uri.getPort());   
HTTPRequest post_req(Poco::Net::HTTPRequest::HTTP_POST,"xxx",HTTPMessage::HTTP_1_1);   
post_req.setKeepAlive(true); 
htmlform.prepareSubmit(post_req); 


std::ostream& oustr = session.sendRequest(post_req); 
htmlform.write(oustr); 

HTTPResponse res; 
std::istream& rs = session.receiveResponse(res); 

std::cerr << rs.rdbuf(); 

अग्रिम

+0

सेटकंटेंट लम्बाई (sizeofimagefile) में, क्या आपने पैरामीटर "aaaaaa" और "cccccc" का आकार शामिल किया है जिसे आप अनुरोध डेटा में अपनी छवि के साथ भेजते हैं? यदि आप अपने फॉर्म के लिए POST विधि का उपयोग करते हैं, तो ये पैरा उसी डेटाबॉक पर जाते हैं, जिस छवि को आप अपलोड करने का प्रयास कर रहे हैं। –

उत्तर

0

धन्यवाद आप अपने स्थानीय सर्वर पर कोई फ़ाइल अपलोड कर सकते हैं लेकिन अपने दूरस्थ सर्वर के साथ, पहले आप अगर अपने रिमोट अपाचे/पीएचपी एक अपलोड सीमा होती है की जाँच करनी चाहिए कर सकते हैं। अपने रिमोट सर्वर में phpinfo() आज़माएं।

http://www.cyberciti.biz/faq/linux-unix-apache-increase-php-upload-limit/

यदि नहीं, तो आप अपने कोड को संशोधित करना चाहिए ...

पोको प्रलेखन से, URL पर: http://www.appinf.com/docs/poco/Poco.Net.HTMLForm.html

HTMLForm:

HTMLForm (स्थिरांक HTTPRequest & अनुरोध, std :: istream & अनुरोध बॉडी);

दिए गए HTTP अनुरोध से HTMLForm बनाता है। अपलोड की गई फ़ाइलें चुपचाप को त्याग दिया गया है।

और यह निर्माता के साथ:

HTMLForm:

HTMLForm (स्थिरांक HttpRequest & अनुरोध, std :: IStream & requestBody, PartHandler & हैंडलर);

दिए गए HTTP अनुरोध से HTMLForm बनाता है। अपलोड की गई फ़ाइलें दिए गए पार्टहैंडलर पर पास की गई हैं।

अपने उदाहरण में, क्या निर्माता आप आवेदन कर रहे हैं?

दूसरी ओर,

addPart:

शून्य addPart ( स्थिरांक std :: स्ट्रिंग & नाम, PartSource * pSource); फ़ॉर्म में एक भाग/अनुलग्नक (फ़ाइल अपलोड) जोड़ता है। फॉर्म पार्टसोर्स का स्वामित्व लेता है और इसे अब हटा देता है जब इसकी आवश्यकता नहीं होती है।हिस्सा केवल भेजी जाएगी यदि फार्म के लिए एन्कोडिंग सेट "बहुखण्डीय/फार्म-डेटा" addPart और HTMLForm के लिए दूसरे निर्माता के साथ "बहुखण्डीय/फार्म-डेटा" का उपयोग करने

कोशिश है।

यदि यह काम नहीं करता है, तो आप क्या भेज रहे हैं यह जांचने के लिए वायरसहार्क जैसे नेटवर्क स्नफ़फर का उपयोग करने का प्रयास करें।

जांचें कि आपके अनुरोध की सामग्री-लंबाई शीर्षलेख, आकार (आपकी छवि) + आकार ("aaaaaa" और "cccccc" पैराम) है। या पोस्ट के बजाय जीईटी विधि के साथ अपना फॉर्म भेजने का प्रयास करें।

अगर यह काम करता है तो मुझे बताएं।

सादर

4
std::ostream& oustr = session.sendRequest(post_req); 
htmlform.write(oustr); 

आपका कोड अनुरोध वस्तु में प्रपत्र डेटा प्रदान करने में सक्षम नहीं है। तो जब आप session.sendRequest को कॉल करते हैं, तो सर्वर पर एक खाली अनुरोध भेजा जाता है। HTMLForm से HTTPRequest में उचित रूपांतरण करने के लिए, आपको इस तरह लिखना होगा -

htmlform.write (session.sendRequest (post_req));

छवि अपलोड कोड जो मेरे लिए काम कर रहा है -

HTTPRequest request(HTTPRequest::HTTP_POST, "/fileupload/upload_file.php", HTTPMessage::HTTP_1_1); 
    HTMLForm form; 
    form.setEncoding(HTMLForm::ENCODING_MULTIPART); 
    form.set("entry1", "value1"); 
    form.set("entry2", "value2"); 
    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 कोड का उपयोग कर रहा है।