Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ------WebKitFormBoundaryMOJKE6NQukiI7UMz
- Content-Disposition: form-data; name="name"
- Some наме
- ------WebKitFormBoundaryMOJKE6NQukiI7UMz
- Content-Disposition: form-data; name="datafile"; filename="GetCloudServer.sh"
- Content-Type: application/octet-stream
- File Contents here... can be binary...
- ------WebKitFormBoundaryMOJKE6NQukiI7UMz--
- template<typename _OutputIterator>
- void http_utils::split(std::string str, std::string delim, _OutputIterator result) {
- typedef boost::algorithm::split_iterator<std::string::iterator> string_split_iterator;
- for(string_split_iterator iter=boost::algorithm::make_split_iterator(str,
- boost::algorithm::first_finder(delim, boost::algorithm::is_equal()));
- iter!=string_split_iterator();
- ++iter) {
- std::string component = boost::copy_range<std::string>(*iter);
- *result = component;
- ++result;
- }
- }
- std::string http_utils::parse_file_upload_body( std::string contents )
- {
- /* Locate the start point. */
- unsigned startPoint = contents.find("rnrn");
- if (startPoint == std::string::npos) throw std::runtime_error("Malformed string.");
- /* Locate the end point by finding the last newline, then backing up
- * to the newline before that.
- */
- unsigned endPoint = contents.rfind('n');
- if (endPoint == std::string::npos || endPoint == 0) throw std::runtime_error("Malformed string.");
- endPoint = contents.rfind('n', endPoint - 1);
- if (endPoint == std::string::npos) throw std::runtime_error("Malformed string.");
- /* Hand back that slice of the string. */
- return std::string(contents.begin() + startPoint + 4, contents.begin() + endPoint-1);
- }
- std::map<std::string, std::string> http_utils::parse_multipart_form_data( std::string form_data )
- {
- std::map<std::string, std::string> parsed_data;
- std::string tag_delimiter_content_disposition= "Content-Disposition: form-data; ";
- std::string taf_argument_name = "name";
- taf_argument_name += "="";
- std::vector < std::string > strings;
- std::string temp;
- this->split(form_data , tag_delimiter_content_disposition, std::insert_iterator<std::vector<std::string> >(strings, strings.begin()));
- BOOST_FOREACH(std::string str, strings)
- {
- size_t found_name = str.find(taf_argument_name);
- if (found_name != std::string::npos)
- {
- std::ofstream myfile;
- size_t end_of_file_name = str.find(""", found_name + taf_argument_name.length());
- if (end_of_file_name != std::string::npos)
- {
- std::string filename(str, found_name + taf_argument_name.length(), end_of_file_name - (found_name + taf_argument_name.length()));
- std::string request_body_from_file_name_to_end(str, found_name + taf_argument_name.length(), str.length() - (found_name + taf_argument_name.length()));
- parsed_data.insert(std::pair<std::string, std::string>(filename, this->parse_file_upload_body(request_body_from_file_name_to_end)));
- }
- }
- }
- return parsed_data;
- }
Add Comment
Please, Sign In to add comment