在Node.js中如何将multipart / form-data上传的图像转换为base64格式

时间:2011-06-19 18:52:48

标签: javascript image file-upload canvas node.js

我想允许用户从他们的本地文件系统中选择一个图像,然后将该图像渲染到页面上的canvas元素。

由于安全性限制('沙盒'浏览器安全模型),客户端javascript无法直接访问文件系统上的图像,因此它必须从服务器往返一次“multipart / form-data”文件上传控件。

我不想将此图像实际保存在服务器上并将其提供出来,因为它仅用于一次性客户端操作。所以,我想知道是否有可能将图像数据服务器端转换为base64编码表示,可以将其发送回客户端。然后我可以轻松地将其作为数据URL绘制回客户端,而无需将图像保存在服务器上的任何位置。或者有更好的方法吗?

我在服务器上使用node.js.

2 个答案:

答案 0 :(得分:1)

转到https://github.com/joyent/node/wiki/modules,抓取一个base64编码库,然后简单地回显data:image/png;base64,,后跟base-64编码文件,用适当的(gif / jpeg)替换“png”

“更好”的方法是将文件实际放入tmp文件夹,回显该文件的链接,然后删除该目录中超过X分钟的所有文件。

答案 1 :(得分:1)

我认为无需将其保存在服务器上或产生Base64 encoding a data URI的费用;只需将其存储在内存中足够长的时间,以便客户端下载。所以你的序列将是这样的:

  1. 客户通过“multipart / form-data”提交上传图片。
  2. 当服务器收到表单时,它会生成一个“丢弃”URL(例如,可以作为#1中请求的响应主体返回);图像文件数据只是存储在内存中。
  3. 客户端可以从#2中的URL检索图像数据。
  4. 当客户端请求#2中的URL时,服务器只是回显图像数据;完成请求后,服务器可以删除数据引用,从而释放内存。
  5. 请注意,由于node.js和AJAX请求的异步性质,项目1-4可以同时完成(尽管“丢弃”URL可能必须与表单帖子单独商定才能真正实现这样工作)。