使用Polymer和Node Js上传Image

时间:2016-03-23 12:18:28

标签: node.js polymer

目前我们正在使用Polymer作为前端。在聚合物中,我们有元素“vaadin-upload”。

问题:我们无法触发/跟踪节点js代码。当我们尝试上传图像时,它会抛出POST 404 not found错误。

请查看下面的Polymer和NodeJS代码。

聚合物

<vaadin-upload target="http://localhost:5000/upload" method="POST" timeout="300000" headers="{'X-Custom-Header': 'value'}"></vaadin-upload>

节点Js

var server = new Hapi.Server();
server.route({
    method: 'POST',
    path: '/upload',
    config: {
          payload:{
                maxBytes:209715200,
                output:'stream',
                parse: false
          }, 
          handler: function (request, reply) {
            var data = request.payload;
            if (data.file) {
                var name = data.file.hapi.filename;
                var path = __dirname + "/upload/" + name;
                var file = fs.createWriteStream(path);

                file.on('error', function (err) { 
                    console.error(err) 
                });

                data.file.pipe(file);

                data.file.on('end', function (err) { 
                    var ret = {
                        filename: data.file.hapi.filename,
                        headers: data.file.hapi.headers
                    }
                    reply(JSON.stringify(ret));
                })
            }

        }
    }
});

2 个答案:

答案 0 :(得分:0)

查看hapijs tutorial后,您需要在创建服务器实例后定义端口。

server.connection({ port: 5000 });

答案 1 :(得分:0)

Hapi会将文件保存到您的目录中,因此您无需处理它。

const server = new Hapi.Server();

server.connection({
    port: 5000
});

server.start(function () {
    console.log('server running at: ' + server.info.uri);
});

const PATH_TO_UPLOADED_FILES = '...';

server.route({
    method: 'POST',
    path: '/upload',
    config: {
        payload: {
            output: 'file',
            uploads: PATH_TO_UPLOADED_FILES,
            parse: true,
            maxBytes: 209715200
        },
        handler: function (request, reply) {
            // file path is at: request.payload.file.path
            reply('thanks');
        }
    }
});