我在节点JS和JavaScript中创建了一个聊天应用程序。我正在给用户一个自由的手上传他们的图片的个人资料。
我正在使用Node JS mv
模块并尝试将用户select文件移动或复制到我的特定目录。我正在使用Socket.io
与节点进行通信。
问题是,当用户选择图像文件时,我使用的是input[type=file]
,我得到了此图像文件的value
。
这是我得到的回报:C:\fakepath\image.png
。
当我将其传递给mv
方法时,由于No such directory
,它会抛出错误:fakepath
。我试图获取文件的真实路径以将其传递给mv
方法,以便它可以将文件移动到我想要的目录。我尝试使用FileReader()
,然后调用fr.readAsDataURL(file);
并返回以下文字:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAMAA...... // shortened
这是我的Javascript
var file_inp = document.getElementById("upl_img");
file_inp.addEventListener("change",(e)=>{
if('files' in file_inp){
if(file_inp.files.length==0){
alert("Select an Image to upload !");
}else{
var file = file_inp.files[0];
var fr = new FileReader();
console.log(file_inp.value);
if(file){
fr.readAsDataURL(file);
}
fr.onloadend = ()=>{
console.log(fr.result)
socket.emit("upload_image",{path:fr.result,name:file_inp.files[0].name,size:file_inp.files[0].size})
}
}
}
})
这是节点脚本
socket.on("upload_image",(data)=>{
mv(data.path, './user_images', function(err) {
if(err) throw err;
console.log('File Moved ! ')
});
})
注意: 我只需要在用户选择图片时将文件移至user_images
目录。