2017-11-25 124 views
-1

我正在使用输入标签,用户能够上传他自己的图像。完成后,我的目标是将图像发送到我的服务器(这是一个node.js服务器),然后将其发送到我的数据库。 我怎么能在客户端做到这一点?我应该用base64编码图像文件吗? 我只是有一个功能来显示图像,但我不知道这是否有用。使用javascript(客户端)发送图像到数据库

JS:

avatar.onchange = function() { 
    var reader = new FileReader(); 

    reader.onload = function(e) { 
    // get loaded data 
    image.src = e.target.result; 
    }; 
    // read the image file as a data URL. 
    reader.readAsDataURL(this.files[0]); 
}; 

HTML:

<input id="avatar" type="file" onchange="previewFile()"> 
<img id="image" width="200px"> 

在此先感谢。

+0

是的发送它在base64,因为它会很容易地存储在数据库中,然后在需要时重建 – wrangler

+0

你需要在服务器端处理。 – TGrif

+0

你不应该将图像编码/解码到数据库中,真的很糟糕。您应该为要上传的文件创建一个文件夹,然后将该URL保存到数据库用户的信息中,并在html侧,从该网址中提取该文件。你可以使用一个库来让你更容易。 https://www.npmjs.com/search?q=uploads+images – Andy

回答

0

你有什么应该足够了,因为readAsDataURL已经将该文件编码为base64字符串。

在你的服务器,你可以直接保存这个数据的URL数据库,但要记住,对于传输数据的URL字符串格式如下:

data:[<mediatype>][;base64],<data> // data is base64 

如果您需要保存或使用直接在服务器上的文件,您可以在<data>(例如,使用正则表达式或split,例如)之前剥离所有内容,并使用[<mediatype>]的适当扩展名保存该文件。

下面是与Buffer在节点base64编码的数据进行解码的例子:

let buff = Buffer.from(base64string, "base64"); // converts base64 back to binary 

如果您需要在浏览器端的base64编码数据进行解码,可以使用atob像这样:

let data = atob(base64string); // back to decoded string 
相关问题