Как загрузить файл на сервер KeystoneJS - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь загрузить CSV-файл в KeystoneJS (я хочу проанализировать строки и добавить записи в мой MongoDB), но это становится сложнее, чем я.

Следуя некоторым примерам, используя "грозный пакет (последний, предварительно установленный с Keystone 4), но кажется, что файл никогда не достигает моего маршрута: во-первых, «on progress» запускается, давая ожидаемый размер, но просто не происходит, и, наконец, событие «oa aborted» запускается.

Я работаю локально и загружаю файлы размером 700 КБ, поэтому никаких проблем с таймаутом.Похоже, это как-то связано с этим:

Загрузка файла KeystoneJS не работает в моем приложении

, который не был решен (как и любой другой подобный запрос, который я нашел).

Кто-нибудь может помочь в этом?

Файл маршрута JS:

exports = module.exports = function(req, res) {
    var view = new keystone.View(req, res);

    if (req.method.toLowerCase() == "post") {
        var form = new formidable.IncomingForm();
        form.type = "multipart"

        /*fs.mkdir("tmp", function(err){
            console.log(err)
        });*/

        form.uploadDir = "tmp";

        form.on("file", function(name, file) {
            console.log(name);
        });
        form.on("error", function(err) {
            console.log(err); // Fires after on abort
        });
        form.on("aborted", function() {
                   // This fires after some time
        });
        form.on("progress", function(bytesReceived, bytesExpected) {
            console.log("PROGRESS"); // this fires once
            console.log(bytesReceived); // 0 here
            console.log(bytesExpected); // actual size here
        });

        form.parse(req, function(err, fields, files) {
            if (err) return; // this fires on error
            var oldpath = files.filetoupload.path;
            var newpath = "../../csv/" + files.filetoupload.name;
            fs.rename(oldpath, newpath, function(err) {
                if (err) throw err;
            });
        });
    }

    // Render the view
    else view.render("importPayments");
};

1 Ответ

1 голос
/ 30 апреля 2019

Как всегда, после целого дня борьбы получается, что вы найдете ответ сразу после того, как разместили вопрос на форуме!

Так что это было намного проще, чем я: нет необходимости использовать какие-либоВ POST-вызове маршрута я обнаружил, что файл готов к использованию в req.files!Я мог получить доступ к полному пути на req.files.upload.path.

Очень просто!

...