Как получить имя файла из строки запроса http? - PullRequest
0 голосов
/ 06 августа 2011

Поэтому я пробую такой код:

std::ofstream myfile;
myfile.open ("example.txt", std::ios_base::app );
myfile  << "Request body: " << request->body << std::endl << "Request size: " <<  request->body.length() << std::endl;

size_t  found_file = request->body.find("filename=");
if (found_file != std::string::npos)
{
    size_t  end_of_file_name = request->body.find("\"",found_file + 1);
    if (end_of_file_name != std::string::npos)
    {
        std::string filename(request->body, found_file+10, end_of_file_name - found_file);
        myfile << "Filename == " <<   filename << std::endl;
    }
}
myfile.close();

Но он выводит, например:

Request body: ------WebKitFormBoundary0tbfYpUAzAlgztXL

Content-Disposition: form-data; name="datafile"; filename="Torrent downloaded from Demonoid.com.txt"

Content-Type: text/plain



Torrent downloaded from http://www.Demonoid.com

------WebKitFormBoundary0tbfYpUAzAlgztXL--


Request size: 265
Filename == Torrent d

Это означает, что из filename="Torrent downloaded from Demonoid.com.txt" мой cede возвращает Torrent d в виде файлаимя в то время как оно должно вернуть Torrent downloaded from Demonoid.com.txt.Как исправить мой файл загрузки http запроса парсера имени файла?

1 Ответ

3 голосов
/ 06 августа 2011

string::find возвращает индекс первого символа в строке поиска .Таким образом, он дает вам индекс f в filename= при поиске этого.

В строке

size_t  end_of_file_name = request->body.find("\"",found_file + 1);

Вам придется изменить это значение на

size_t  end_of_file_name = request->body.find("\"", found_file + 9 + 1); // 9 because that's the length of "filename=" and 1 to start at the character after the "

Затем измените

std::string filename(request->body, found_file+10, end_of_file_name - found_file);

на

std::string filename(request->body, found_file + 10, end_of_file_name - (found_file + 10));

Возможно, вы захотите добавить еще одну переменную, чтобы прекратить добавление 10 все время.

...