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;
}