string Darabonba_FileForm::FileFormStream::read()

in cpp/src/file_form.cpp [39:77]


string Darabonba_FileForm::FileFormStream::read() {
  vector<string> stream_keys;
  vector<string> str_keys;
  for (const auto& i : _form) {
    if (typeid(Darabonba_FileForm::FileField) == i.second.type()) {
      stream_keys.push_back(i.first);
    } else {
      str_keys.push_back(i.first);
    }
  }

  sort(str_keys.begin(), str_keys.end());
  string form_str;
  for (const auto& k : str_keys) {
    if (typeid(string) == _form[k].type()) {
      string value = boost::any_cast<string>(_form[k]);
      form_str.append("--")
      .append(_boundary)
      .append("\r\nContent-Disposition: form-data; name=\"")
      .append(k).append("\"\r\n\r\n").append(value)
      .append("\r\n");
    }
  }

  for (const auto& k : stream_keys) {
    if (typeid(Darabonba_FileForm::FileField) == _form[k].type()) {
      Darabonba_FileForm::FileField file_field = boost::any_cast<Darabonba_FileForm::FileField>(_form[k]);
      string content = file_field.content->read();
      form_str.append("--")
      .append(_boundary)
      .append("\r\nContent-Disposition: form-data; name=\"")
      .append(k).append("\"; filename=\"").append(*file_field.filename)
      .append("\"\r\nContent-Type: ").append(*file_field.contentType)
      .append("\r\n\r\n").append(content).append("\r\n");
    }
  }
  form_str.append("--").append(_boundary).append("--\r\n");
  return form_str;
}