// 如果是Exe形式的CGI,则使用如下语句编译: // g++ -g -o upload.cgi upload.cpp -I/usr/local/cgicc/include /usr/local/cgicc/lib/libcgicc.a // 如果是共享库(Windows平台叫动态库)形式的CGI,则使用如下语句编译: // g++ -g -o upload.cgi upload.cpp -shared -fPIC -I/usr/local/cgicc/include /usr/local/cgicc/lib/libcgicc.a #include <stdio.h> #include <sstream> #include "cgicc/Cgicc.h" #include "cgicc/HTMLClasses.h" #include "cgicc/HTTPHTMLHeader.h" int main(int argc, char **argv) { try { cgicc::Cgicc cgi; // Output the HTTP headers for an HTML document, // and the HTML 4.0 DTD info std::cout << cgicc::HTTPHTMLHeader() << cgicc::HTMLDoctype(cgicc::HTMLDoctype::eStrict) << std::endl; std::cout << cgicc::html().set("lang", "en").set("dir", "ltr") << std::endl; // Set up the page's header and title. std::cout << cgicc::head() << std::endl; std::cout << cgicc::title() << "GNU cgicc v" << cgi.getVersion() << cgicc::title() << std::endl; std::cout << cgicc::head() << std::endl; // Start the HTML body std::cout << cgicc::body() << std::endl; // Print out a message std::cout << cgicc::h1("Hello, world from GNU cgicc") << std::endl; const cgicc::CgiEnvironment& env = cgi.getEnvironment(); std::cout << "<p>accept: " << env. getAccept() << std::endl; std::cout << "<p>user agent: " << env.getUserAgent() << std::endl; std::cout << "<p>cookie: " << std::endl; const std::vector<cgicc::HTTPCookie>& cookies = env.getCookieList(); for (std::vector<cgicc::HTTPCookie>::size_type i=0; i<cookies.size(); ++i) { const cgicc::HTTPCookie& cookie = cookies[i]; std::cout << "<br> cookie[" << cookie.getName() << "] = " << cookie.getValue() << std::endl; } std::cout << "<p>query string: " << env.getQueryString() << std::endl; std::cout << "<p>remote: " << env.getRemoteAddr() << ":" << env.getServerPort() << std::endl; std::cout << "<p>form: " << std::endl; const std::vector<cgicc::FormEntry>& form_entries = cgi.getElements(); for (std::vector<cgicc::FormEntry>::size_type i=0; i<form_entries.size(); ++i) { const cgicc::FormEntry& form_entry = form_entries[i]; std::cout << "<br> form[" << form_entry.getName() << "] = " << form_entry.getValue() << std::endl; } // // 取被上传的文件信息 // // 使用getFile取得指定的被上传文件信息 cgicc::const_file_iterator file_iter = cgi.getFile("file"); // 使用getFiles可以取得所有被上传文件信息 if (file_iter == cgi.getFiles().end()) { std::cout << "<p>file: " << cgi.getFiles().size() << std::endl; } else { const cgicc::FormFile& file = *file_iter; std::cout << "<p>file: " << std::endl; std::cout << "<br> name: " << file.getName() << std::endl; std::cout << "<br> filename: " << file.getFilename() << std::endl; std::cout << "<br> type: " << file.getDataType() << std::endl; std::cout << "<br> size: " << file.getDataLength() << std::endl; std::cout << "<br> content: " << file.getData() << std::endl; } // Close the document std::cout << cgicc::body() << cgicc::html(); } catch(const std::exception& e) { // handle error condition } return 0; } |