节点使用fs保存文件读取器base64 svg上传

时间:2016-08-24 10:46:26

标签: node.js svg base64 fs writefile

我尝试保存从客户端上传的图片,我的代码可以很好地与png和jpg一起使用,但不适用于svg' s。什么是最好的方式?

客户端:<input type="file> =&gt; fileReader.readAsDataURL =&gt; fileReader.result =&gt; xhr

服务器端:

saveUserImage(userid, file, base64, callback) {
  if(file.type.indexOf('image') != 0)
    return callback(false);

  var fs = require("fs");

  var regEx = new RegExp('^data:' + file.type + ';base64,');
  base64 = base64.replace(regEx, "");

  fs.mkdir('imgs', function() {
    fs.writeFile('imgs/' + userid + "_" + file.name, base64, 'base64', function(err) {
      if(err) return callback(false);
      return callback('imgs/' + userid + "_" + encodeURIComponent(file.name));
    });
  });
}

我认为保存的svg编码错误:

u«ZŠf {û/ƒìf•¶¬{®Þ[™\œÚ[ÛHŒKŒˆ[˜ÛÙ[™ÏHš\ÛËN
NKLHÏ‚KKHÙ[™\˜]ÜŽˆYØ™H[\ݘ]܈NKŒŒÕ‘È^ÜYËR[ˆˆÕ‘È™\œÚ[ÛŽˆ
‹ŒZ[
HKO‚ݙș\œÚ[ÛHŒKŒHˆYH“^Y\—ÌHˆ[œÏHš‹ËÝÝÝËÌ˛ܙËÌŒÜݙȈ[œÎž[šÏHš‹ËÝÝÝËÌ˛ܙËÌNNNKÞ[šÈˆHŒˆOHŒ‚‚HšY]ЛÞHŒLËLŒHLËLŒHˆÝ[OH™[˜X›KX˜XÚÙÜ›Ý[™›™]ÈLËLŒHLËLŒNȈ[œÜXÙOHœ™\Ù\™H‚Ï‚‚OÏ‚‚BOÏ‚‚BBOÏ‚‚BBBOÏ‚‚BBBBO]Ý[OH™š[ˆÍȈH“LLLËŽLË‹Ž˜Í‹ŒÌLKÌ‹
ËŒÍKŒM‹‹ŒÍÎÌ΂BBBBBXËMKŒMKLŒN
LMKMËMKŽMLËL‹ŒÎ
‹MKŽÌ˜ËM‹ŒÌLËNÍMËŒÍKLŒML‹ŒÍÍËLÌ΂BBBBBPÎL‹ÎNÌ‹
ÍLËŒNN‹Ì
KLLËŽLË‹Žžˆ‹Ï‚‚BBBOÙÏ‚‚BBBOÏ‚‚BBBBO]Ý[OH™š[ˆÌÌÌÍŒÐNȈH“NKŽLNK
ÌËŒÌ͘ËM‹ŒÌLËNÍMËŒÍKLŒML‹ŒÍÍËLÌ΂BBBBBXÍKŒM‹LLŒN
MKM‹LMKŽMLË‹ŒÎ
KLMKŽÌˆ‹Ï‚‚BBBOÙÏ‚‚BBBOÏ‚‚BBBBO]Ý[OH™š[ˆÌÌÌÍŒÐNȈH“NLŒŒK
ÍŽÍØËLŒL‹LŒŒÎLŒKLŒÍNLŒ˜ËL
ÍLŒ
‹LŽLMËLŒŒÍLKŒNM‹LŒM‚BBBBBXËM‹ŽLKNKLËMËŽ
KLŒKŽ
LKL‹MËLÌ‹ŒXÍKŒÌLËLLŒŽL‹MKÍÎKLM‹
‹ËŒÍÍ‹LM‹
˜ÌŒL‹ŒŒÎŒKŒÍNŒ‚‚BBBBBXÌ
͌
‹ŽLMËŒŒÍKŒNM‹ŒMØÍ‹ŽLKKLË
ËŽ
‹ŒKŽ
LK‹NÌ‹ŒPÌLL‹ŒÌË
Ž
LKŽ

svg支持会很好,有什么想法吗?

2 个答案:

答案 0 :(得分:0)

问题是,svg的mime类型是image/svg+xml!加号未转义且正则表达式不匹配。我使用了一个简单的函数来逃避,现在它可以运行perfekt

function escapeRegExp(str) {
  return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}

答案 1 :(得分:0)

您也可以尝试const Base64File=require('js-base64-file'); const image=new Base64File; const file='test.svg'; //path should alwas end in a / const path=`${__dirname}/`; //this will load and convert if needed const data=image.loadSync(path,file); console.log('you could send this image via ws or http to the browser now : \n',data); image.save(data,path,`copy-b64-${file}`); 模块。只需先将原始svg保存到磁盘然后转换它。

github repo

Hour            Total      Qty       LC  
09:00 - 10:00   $53        18        $25  
10:00 - 11:00   $60        22        $24  
12:00 - 13:00   ....  
13:00 - 14:00   ....

您可以在test.js文件中看到异步示例。