원격 웹 서버에 이미지를 업로드하려고합니다. 나는 HTMLForm과 FilePartSource를 사용했다. 로컬 서버 (예 : loclhost)에 이미지를 성공적으로 업로드 할 수 있지만 원격 서버에 업로드하려고하면 원격 웹 서버에서받은 응답은 "411 Length Required"입니다. request.setContentLength (sizeofimagefile)를 설정하려고했지만 여전히 동일한 문제가 발생했습니다. 문제가 무엇인지 나에게 안내 할 사람이 있습니까? 내 코드는 다음과 같습니다. 사전POCO : C++에서 poco를 사용하여 웹 서버에 이미지를 업로드하는 방법
답변
에서
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();
감사 로컬 서버에 파일을 업로드 할 수 있지만 원격 아파치/PHP는 업로드 제한이있는 경우 원격 서버로 먼저 확인해야 할 수 없습니다. 원격 서버에서 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 (CONST HTTPRequest & 요청, 표준 : istream & requestBody);
주어진 HTTP 요청에서 HTMLForm을 작성합니다. 업로드 된 파일은 입니다. 자동으로 삭제됩니다. ]
HTMLForm (CONST의 HTTPRequest & 요청 표준 : IStream을 & requestBody, PartHandler & 핸들러)
HTMLForm :
그리고이 생성자
주어진 HTTP 요청에서 HTMLForm을 작성합니다. 업로드 된 파일은 주어진 PartHandler으로 전달됩니다.
예를 들어, 어떤 생성자를 적용하고 있습니까? 한편
,addPart :
무효 addPart ( const를 표준 : : 문자열 & 이름, PartSource *의 PSource); 양식에 첨부 파일 (파일 업로드)을 추가합니다. 이 양식은 PartSource의 소유권을 가져오고 더 이상 필요하지 않을 때 을 삭제합니다.부분은 폼의 부호화 집합을 "multipart/form-data"addPart 및 HTMLForm위한 제 생성자 "다중/폼 데이터"를 사용
시도 경우 전송한다.
작동하지 않는 경우 Wireshark와 같은 네트워크 스니퍼를 사용하여 보내는 것을 확인하십시오.
요청의 Content-Length 헤더가 sizeof (이미지) + sizeof ("aaaaaa"및 "cccccc"매개 변수)인지 확인하십시오. POST 대신 GET 메서드로 양식을 보내보십시오.
작동하는지 알려주세요.
감사
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 코드를 사용하고 있습니다.
in setContentLength (sizeofimagefile), 요청 데이터 블록에 이미지와 함께 보내는 매개 변수 "aaaaaa"및 "cccccc"의 크기를 포함 시켰습니까? 폼에 POST 메서드를 사용하면 이러한 매개 변수는 업로드하려는 이미지와 동일한 데이터 블록으로 이동합니다. –