使用node / multer / axios上传文件

时间:2017-10-19 13:20:12

标签: node.js axios multer

我试图在这里做一些棘手的事情,我正在将multer成功上传到MemoryStorage的文件。关键是我需要从内存中获取文件并发送到另一台服务器。这就是我在做的事情:

var express = require('express');
var router = express.Router();
var path = require('path');
const multer = require('multer');
const FormData = require('form-data');

router.post('/files', upload.single('file'), function (req, res) {

    const axios = require('axios');

    const url = configuration.dataHub.url + '/api/files';

    var config = {
        headers: {'x-token': req.session.token, 'Content-Type': 'application/json'}
    };

    const form = new FormData();
    form.append('file', req.file.buffer);

    if (req.session.hasOwnProperty('token')) {

        axios.post(url, form, config)
            .then(response => {

                if (response.data.success) {
                    console.log("Arquivo enviado");

                    res.send({
                        success: true,
                        message: 'Arquivo enviado com sucesso!'
                    });
                } else {
                    console.log("Arquivo nao enviado");

                    res.send({
                        success: false,
                        message: "Houve um problema ao enviar a ficha, verifique sua conexão ou tente novamente mais tarde."
                    });
                }

            })
            .catch((error) => {
                console.log("N Enviado", error.message);
                res.send({
                    success: false,
                    message: "Houve um problema ao enviar o arquivo, verifique sua conexão ou tente novamente mais tarde."
                });
            });

    } else {
        res.send({
            success: false,
            session: false,
            message: "Sua sessão expirou após 5 minutos sem uso. Faça login novamente!"
        });
    }
});

使用此代码,我收到错误:

  

结束后写

任何解决方案吗?

2 个答案:

答案 0 :(得分:0)

而不是res.send()尝试使用res.write()并在您认为已完成所有处理的代码末尾使用一个res.send(),而res.send()应该跟随res.end()

希望这有帮助!

答案 1 :(得分:0)

我改为请求js,这样做,工作正常:

formData = {
            file: {
                value: file.buffer,
                options: {
                    filename: file.originalname,
                    contentType: file.mimetype
                }
            }
        };

        var options = {
            url: url,
            headers: {
                'x-token': req.session.token
            },
            formData: formData
        };

        request.post(options, function optionalCallback(err, httpResponse, body) {

            if (err) {
                res.send({
                    success: false,
                    session: true,
                    message: 'There is a problem sending the files!'
                });
            } else {

                result = result.concat(JSON.parse(body));

                res.send({
                        success: true,
                        session: true,
                        message: 'sucess!',
                        files: result
                    });                                            

            }

        });
相关问题