Слишком большой файл Wt :: WFileUpload

#c #wt

#c #wt

Вопрос:

Я пытаюсь разрешить пользователю загружать несколько больших XML- и текстовых файлов для дальнейшей обработки, но WFileUpload не разрешает ничего более 128 КБ, и я не могу найти способ переопределить настройку по умолчанию. Установлен wt 3.3.6 на Xubuntu 16.04. Доступ к серверу wthttp с 0.0.0.0: 8080 с использованием в основном настроек по умолчанию в Firefox.

Я просмотрел настройки —help для исполняемого файла file_dialog и нашел опцию —max-memory-request-size, но изменение этого, похоже, не помогает. Я также отредактировал /etc/wt/wt_config.xml чтобы изменить максимальный размер запроса памяти на значения, превышающие 128 КБ, также безрезультатно. На основе выходного файла «file_dialog-output.txt «Я могу успешно загрузить файл размером 60 КБ, но файл размером 2 МБ завершается с ошибкой.

Я создаю и запускаю следующий код, как указано в файле .hpp:

file_dialog.hpp

 //Compile
//g   file_dialog.cpp -o file_dialog -lwt -lwthttp
//Run
//./file_dialog --docroot . --http-address 0.0.0.0 --http-port 8080

//headers
#include <Wt/WApplication>
#include <Wt/WContainerWidget>
#include <Wt/WFileUpload>
#include <Wt/WPushButton>
#include <Wt/WBreak>

//FileApplication class definition, derived from WApplication
class FileApplication : public Wt::WApplication
{
    public:
        FileApplication(const Wt::WEnvironment amp; env);
        Wt::WContainerWidget * file_upload_dialog_container_widget;
        Wt::WFileUpload * file_upload;
        Wt::WPushButton * file_output_button;
        std::ofstream fout;
        void tooLargeBytes(long long int byte_size_1);
        void warningFileTooLarge(void);
        void infoFileUploaded(void);
};
  

file_dialog.cpp

 #include "file_dialog.hpp"

//FileApplication constructer class; returns root with widget
FileApplication::FileApplication(const Wt::WEnvironmentamp; env)
:   Wt::WApplication(env)
{
    setTitle("File Generation");

    this->requestTooLarge().connect(this, amp;FileApplication::tooLargeBytes);

    Wt::WContainerWidget * upload_dialog_container_widget = new Wt::WContainerWidget(root());
    Wt::WFileUpload * file_upload = new Wt::WFileUpload(upload_dialog_container_widget);
    file_upload->setMultiple(true);
    new Wt::WBreak(upload_dialog_container_widget);
    Wt::WPushButton * file_output_button = new Wt::WPushButton(upload_dialog_container_widget);
    file_output_button->setText("Upload");

    file_upload->fileTooLarge().connect(this, amp;FileApplication::warningFileTooLarge);
    file_upload->uploaded().connect(this, amp;FileApplication::infoFileUploaded);
    file_output_button->clicked().connect(file_upload, amp;Wt::WFileUpload::upload);
    file_output_button->clicked().connect(file_output_button, amp;Wt::WPushButton::disable);
}

//Application - File too large
void FileApplication::tooLargeBytes(long long int byte_size_1)
{
    std::ofstream fout ("file_dialog-output.txt");
    fout << "byte_size_1";
    fout << byte_size_1;
    fout.close();
}

//File too large
void FileApplication::warningFileTooLarge(void)
{
    std::ofstream fout ("file_dialog-output.txt");
    fout << "File too large";
    fout.close();
}

//File successfully uploaded
void FileApplication::infoFileUploaded(void)
{
    std::ofstream fout ("file_dialog-output.txt");
    fout << "File uploaded";
    fout.close();
}

//Application constructor function
Wt::WApplication * createApplication(const Wt::WEnvironmentamp; env)
{
    return new FileApplication(env);
}

//Main function
int main(int argc, char ** argv)
{
    return Wt::WRun(argc, argv, amp;createApplication);
}
  

Любая помощь очень ценится!

Wt: https://www.webtoolkit.eu/wt

Wt::WFileUpload: https://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WFileUpload.html

Ответ №1:

Решение: увеличьте параметр max-request-size в пределах wt_config.xml

Спасибо этим ресурсам за решение:

https://www.webtoolkit.eu/wt/doc/reference/html/overview.html

http://redmine .webtoolkit.eu/boards/2/topics/11351?r=11943#message-11943