Не удается загрузить большой файл PDF в mysql с помощью nodejs express

avatar
Sadman Sakib Hasan
7 апреля 2018 в 22:58
342
1
0

Я использую модуль express-fileupload для загрузки pdf-файлов и сохранения их в базу данных mysql. Я могу загружать только файлы PDF < 10mb. Я хочу разрешить загрузку файлов с большей пропускной способностью, например 50 МБ.

Вот мой роутер:

app.use(fileUpload({ limits: { fileSize: 50 * 1024 * 1024 } })); // needed for file upload
app.use(bodyParser.json({ limit: '50mb' }));
app.use(bodyParser.urlencoded({
    limit: '50mb',
    extended: true
}));

Я вижу, что мой файл загружен на 100 % на панели загрузки браузера Chrome, однако вскоре после этого мое приложение вылетает с ошибкой:

events.js:183 бросать; // Необработанное событие "ошибка"

Ошибка: невозможно записать в закрытом состоянии

Я попытался увеличить время ожидания соединения для mysql, т.е. до 600000, однако все еще сталкиваюсь с той же проблемой.

Источник

Ответы (1)

avatar
Sadman Sakib Hasan
7 апреля 2018 в 23:15
0

Похоже, я это исправил. Это произошло потому, что максимальная передача пакетов для соединения mysql по умолчанию составляла 4 МБ. Вы можете изменить его на свой собственный размер:

SET GLOBAL max_allowed_packet=1073741824;

Или измените его в файле my.ini: Как изменить размер max_allowed_packet

Raymond Nijland
7 апреля 2018 в 23:27
1

Вы знаете, что вы устанавливаете это значение глобально на ~ 1,07 ГБ? ... Я бы установил max_allowed_packet в качестве переменной сеанса из самого приложения, что-то вроде connection.query("SET SESSION max_allowed_packet = 100000000"); (100000000 байт = 100 МБ) сразу после подключения к базе данных.

Sadman Sakib Hasan
8 апреля 2018 в 00:59
0

Да, я знаю. Я просто добавил это в качестве примера.

Wilson Hauck
12 апреля 2018 в 20:21
0

Ожидайте OOM, если у вас есть значительное количество одновременных пользователей при использовании 1G max_allowed_packet. Установка лимита сеанса будет в ваших интересах.