使用nodejs上传图像

时间:2018-02-15 09:02:22

标签: node.js socket.io ionic2

我正在使用Ionic v3和后端使用Nodejs。

var storage = multer.diskStorage({

destination: function(req, file, callback) {
    callback(null, './uploads')
},
filename: function(req, file, callback) {
    console.log(file)
    callback(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname))
}
});

var upload = multer({storage:storage});

要调用此方法,我们需要req,res通过API调用,如下所示

upload(req, res, function(err) {
    res.end('File is uploaded')
});

我的问题是,可以在没有API调用(req,res)的情况下调用此上传函数吗?如果是,我们该怎么做?

我想做的是,我正在使用ionic2和nodejs开发聊天应用程序,我可以在其中共享图像。该图像应上传到服务器端。如何进行套接字编程?

1 个答案:

答案 0 :(得分:1)

如果您想使用base64上传图片,则可以使用以下代码

socket.on('Upload_Image_base64', function(data)
{
    var fs = require('fs');
    var img = data.image64;
    var imgname = new Date().getTime().toString();
    imgname = data.userid + imgname + '.png';
    var data = img.replace(/^data:image\/\w+;base64,/, "");
    var buf = new Buffer(data, 'base64');
    fs.writeFile(__dirname + "/uploads/" +imgname, buf);
});

//这里是data.image64和data.userid - >是我们在套接字事件请求期间传递的参数。 对于多部分 - 这可能会对您有所帮助。

socket.on('Upload_Image', function(data)
{
    var app = require('express')();
    var multer  = require('multer')
    var storage = multer.diskStorage({
          destination: function (req, file, cb) {
            cb(null, 'uploads/')
          },
          filename: function (req, file, cb) {
            cb(null, file.fieldname + '-' + Date.now())
          }
    })

    var upload = multer({ storage: storage }).single(data.file);
    console.log(data.file);

    app.post('/',  function (req, res) 
    {
        upload(req,res,function(req,res)
        {
            if(err)
            {
                console.log("error uploading file");
            }
            else
            {
                console.log("uploaded");
            }
        });
    });
});