Poco kullanarak webser için görüntü nasıl yüklenir Uzak web sunucusuna bir görüntü yüklemeye çalışıyorum. HTMLForm ve FilePartSource kullandım. Görüntüyü yerel dosyaya (örn. Loclhost) başarıyla yükleyebildim, ancak uzak sunucuya yüklemeye çalıştığımda, uzak web sunucusundan alınan yanıt "411 Length Required". request.setContentLength (sizeofimagefile) ayarlamayı denedim ama yine de aynı sorun. Sorunun ne olduğu konusunda bana rehberlik edebilir mi? İşte kodum. peşinPOCO: C++
cevap
yılında
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();
sayesinde yerel sunucuya bir dosya yükleyebilirsiniz, ancak uzak Apache/PHP bir yükleme sınırını varsa uzak sunucu ile öncelikle kontrol etmelisiniz yapamıyorsanız. Uzak sunucunuzda bir phpinfo() deneyin. Değilse, kodunuzu gözden geçirmeliyiz
http://www.cyberciti.biz/faq/linux-unix-apache-increase-php-upload-limit/
...
Poco belgelerine bakıldığında, URL adresinden: http://www.appinf.com/docs/poco/Poco.Net.HTMLForm.html
HtmlForm:
HtmlForm (const HTTPRequest & istek, std :: istream & requestBody);
Verilen HTTP isteğinden bir HTMLForm oluşturur. Karşıya yüklenen dosyalar sessizce atılır. ;
HtmlForm (const HTTPRequest & istek, std :: istream & requestBody, PartHandler & işleyici):
HtmlForm:
Ve bu kurucu ile
Verilen HTTP isteğinden bir HTMLForm oluşturur. Yüklenen dosyalar, verilen PartHandler'a iletilir.
Örneğinizde Ne kurucu uyguluyorsunuz? Öte yandan
,addPart:
geçersiz addPart ( const std :: string & isim, PartSource * pSource); Forma bir parça/ek (dosya yükleme) ekler. Form, PartSource'un sahipliğini alır ve artık gerekmediğinde onu siler.kısım sadece form için kodlama grubu "çok parçalı/form-" addPart ve HtmlForm ikinci kurucu ile "parçalı/formu verilerini" kullanımı
deneyin ise gönderilecektir.
Çalışmıyorsa, ne gönderdiğinizi kontrol etmek için Wireshark gibi bir ağ algılayıcı kullanmayı deneyin.
İsteğinizin İçerik Uzunluğu başlığının olup olmadığını kontrol edin, sizeof (resminiz) + sizeof ("aaaaaa" ve "cccccc" params). Veya formunuzu POST yerine GET yöntemiyle göndermeyi deneyin.
Çalışırsa bana bildirin.
Selamlar
std::ostream& oustr = session.sendRequest(post_req);
htmlform.write(oustr);
Kodunuz isteği nesnesine form verilerini atamak mümkün değildir. Yani, session.sendRequest öğesini çağırdığınızda, sunucuya boş bir istek gönderilir. HTTPRequest için HtmlForm uygun bir dönüşüm yapmak için, bu gibi yazmak gerekir -
htmlform.write (session.sendRequest (post_req));
benim için çalışıyor resim yükleme kodudur -
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);
gelen yükleme sunucusu HTML formu dosya yükleme için standart PHP kodu kullanıyor.
- 1. POCO
- 2. Poco C++ ile MS SQL kullanarak ODBC
- 3. Poco :: Logger threadsafe nedir?
- 4. Poco C++ Kitaplığı Destek pozisyonu komut satırı argümanları mı?
- 5. POCO C++ kitaplıkları ile Çoklu Yazılı TCP Sunucusu
- 6. POCO C++ - NET SSL - HTTPS isteği nasıl yapılır
- 7. Basit POCO için Basit T4 jenerasyonu
- 8. Silverlight POCO, RIA hizmetleri tarafından döndürüldü
- 9. Varlık Çerçevesi POCO - Bir gezinme özelliğini yenileyin
- 10. Özel bir POCO serializer/deserializer nasıl yazılır?
- 11. Poco :: Yol const wchar_t * ile derler ama beklenmedik şekilde davranır
- 12. NEST 2.0'daki bazı POCO özelliklerini yok sayılıyor/yok
- 13. LINQ Entity Sınıfları oluştururken Corcoting POCO Domain Modeli?
- 14. C++ süreçler için çapraz platform: POCO lib iyi midir? diğer alternatifler?
- 15. Yumuşak silme, gezinme özellikleri EF4 CTP5 POCO içinde
- 16. MVC3 EF4'ü POCO Deposu/UnitOfWork Bağlantı Hatası
- 17. Güncelleme EF 4 Özellik CTP 4 Müstakil POCO
- 18. Varlık Framework 6 Projeksiyon POCO varlık dönüş tipi
- 19. EF CodeFirst: DbContext için tüm POCO türlerini alın
- 20. Yetkilendirme Çerçevesi: POCO yaklaşımı ile SOA'daki izlemeyi değiştir
- 21. Veritabanından POCO/DTO oluşturmak için araç (SQL Server)
- 22. Poco sınıfı (nesne) bir yöntem parametresinden otomatik olarak nasıl oluşturulur?
- 23. EF Varlıklar'dan daha fazla bir Deposu olan POCO nesnelerini iade etmenin artıları/eksileri nelerdir?
- 24. C++ kütüphanelere makefile (newbe) ile bağlanıyor
- 25. C# tasarımcısı C: C#
- 26. C/C++
- 27. C# C#
- 28. C/C++
- 29. C/C++
- 30. C/C++ C-string tanımı
setContentLength (sizeofimagefile), Request dataBlock öğesindeki resminizle gönderdiğiniz "aaaaaa" ve "cccccc" params'larının boyutunu dahil ettiniz mi? Formunuz için POST yöntemini kullanırsanız, bu param yüklemeleri, yüklemeye çalıştığınız resmin aynı veritabanına gider. –