如何使用node和socket.io将文件上载到服务器

时间:2015-11-25 02:45:49

标签: node.js sockets fs

好的,我有一个html <input type='file' />,我试图将所选文件发送到服务器,这样我便可以保存。

但目前我只能获得<Buffer,然后将<Buffer转换为base64值。我不想存储base64,我实际上想将file本身存储在服务器上,以便我可以将其作为<image src='folder/fileThatWasUploaded.png' />引用。

目前,我正在使用socket.io向聊天中的其他用户发送消息,并在后端发送node以将消息保存到数据库等。

以下是我用来获取文件并将其发送到服务器的客户端代码。

$("#imgUpload").on('change',function(){
     var selectedFile = this.files[0];
     console.log(selectedFile);

     // Send message to chat and save to mongo: 
     socket.emit('clientMessage', {
         message: $('#chatMessage').val(), 
         name: user.name,
         userId: user.userId,
         image: selectedFile
     });
          // selectedFile.convertToBase64(function(base64){
          //      base64Img = base64;
          // }) 
});

这是我用来从套接字接收发出的数据的服务器端代码,然后它会收到文件并将其保存到文件夹中。但是我得到<Buffer而不是获取文件,我无法将<Buffer 89 50 4e 4 .....写入文件夹。

// When user sends message, emit it back to others
    socket.on('clientMessage', function(data) {
        console.log(chatId);

        // Send the message to database and emit back to other users
        createMessage(data, chatId, function() {
          console.log(data.image); // This prints out a buffer
             // This is suppose to write the file, BUT IT CAN'T WRITE A BUFFER
             // fs.writeFile("/public/images/", data.image, function(err) {
            //     if(err) {
            //         return console.log(err);
            //     }

            //     console.log("The file was saved!");
            // }); 

有没有人对我能做什么有任何想法?

编辑:

我已使用以下代码将buffer转换为base64值,一旦转换为base64字符串,它将保存为.jpg。这是一种好的有效方式吗?

  fs.writeFile("imageConversion.jpg", new Buffer(data.image, "base64"), function(err) {
       if(err){
            console.log("Error: ", err);
            return;
       }
       console.log("image converted and saved to dir");
  });

0 个答案:

没有答案