Не удается загрузить файл в Safari на сервер Express.js

Я загружаю изображение на сервер Express.js (3.0.0), используя загрузчик qq ajax Valum (https://github.com/valums/file-uploader). Он работает во всех популярных браузерах, кроме Safari. Возникает следующая ошибка:

Ошибка типа: не удается прочитать свойство 'длина' из неопределенного при повышении (/home/andrew/projects/dreamshare-git/src/main/node_modules/express/node_modules/connect/node_modules/qs/lib/querystring.js:15:18) при разборе (/home/andrew/projects/dreamshare-git/src/main/node_modules/express/node_modules/connect/node_modules/qs/lib/querystring.js:53:58) при разборе (/home/andrew/projects/dreamshare-git/src/main/node_modules/express/node_modules/connect/node_modules/qs/lib/querystring.js:50:7) при слиянии (/home/andrew/projects/dreamshare-git/src/main/node_modules/express/node_modules/connect/node_modules/qs/lib/querystring.js:68:5) в String.split.reduce.base (/home/andrew/projects/dreamshare-git/src/main/node_modules/express/node_modules/connect/node_modules/qs/lib/querystring.js:111:14) в Array.reduce (родной) в parseString (/home/andrew/projects/dreamshare-git/src/main/node_modules/express/node_modules/connect/node_modules/qs/lib/querystring.js:101:6) в Object.exports.parse (/home/andrew/projects/dreamsha) re-git/src/main/node_modules/express/node_modules/connect/node_modules/qs/lib/querystring.js:127:7) в IncomingMessage.module.exports (/home/andrew/projects/dreamshare-git/src/main/node_modules/express/node_modules/connect/lib/middleware/urlencoded.js:66:18) в IncomingMessage.EventEmitter.emit (events.js:90:17)

Можете ли вы посоветовать какое-нибудь решение? Спасибо!

1 ответ

Хорошо, мы отсортировали его после того, как покопались во внутренних файлах express.js. Проблема заключалась в том, что старая версия загрузчика файлов не установила тип для загружаемого файла, а Safari установил для него обычную запись по умолчанию, так что express.js неправильно обрабатывает ее как простой запрос почты. Решением было обновить загружаемую библиотеку. В следующей строке правильно указывается тип контента:

xhr.setRequestHeader("Content-Type", file.type);
Другие вопросы по тегам