файл процесса после загрузки огромным в node js + express - PullRequest
0 голосов
/ 09 марта 2020

Я использую грозный для загрузки файлов. после того, как файл полностью загружен, я хочу сделать копии того же размера, используя jimp.

, ранее я вызывал jimp resizer для события form.on('end', ...), но кажется, что файл был частично загружен до тех пор и как jimp пытается получить к нему доступ во время загрузки, файл остается поврежденным!

, поэтому определенно мне нужно вызвать jimp после обработки form.on('end', ...).

вот что я делаю -

app.post("/upload", function (req, res) {
    let form = new IncomingForm()

    var file_path, file_name

    form.on('fileBegin', (name, file) => {
        // process upload here. should be jPG / PNG, smallest edge should be 1200px, compress to 720px and 240px
        // save raw file
        let dt = new Date()
        file_name = dt.getTime() + '.' + file.name.split('.').pop()
        file_path = __dirname + '/upload/raw/' + file_name
        file.path = file_path
    })

    form.on('file', function (name, file) {

    })

    form.on('end', () => {

    })

    form.parse(req)
    resizer(file_path)

    res.json(
        file_name
    )
})

resizer(file_path) - функция, в которой я выполняю всю обработку jimp. Однако это, кажется, вызывается асинхронно, и, таким образом, файл не существует, когда он вызывается. asyn c await кажется бесполезным, так как этот процесс основан на событиях. Есть ли способ вызвать Resizer после того, как вся обработка сделана? или если есть грозное событие для того же?

1 Ответ

0 голосов
/ 09 марта 2020

Похоже, что вызов функции внутри обратного вызова form.parse делает свое дело.

для справки - в конце концов, вы должны сделать это -

form.parse(req, (error, field, file) => {
    resizer(file_path)
})

, сохраняя этот поток активным, если кто-то натыкается на эту ситуацию в будущем

...