使用multer从客户端获取详细信息后,如何在nodejs中的base64中对文件进行编码

时间:2018-08-11 10:36:58

标签: javascript node.js angular multer

我是sendind文件的详细信息,从角度到我的app.js为

onFileSelected(event: EventEmitter<File[]>) {
    const file: File = event[0];
    console.log(file); 
    const formData = new FormData();
    formData.append('file', file);
    const r = new XMLHttpRequest();
    r.open('POST', '/user/upload');
    r.send(formData);
}

然后在app.js中

const multer = require('multer');
const upload = multer({dest:'./pics/'});

router.post('/upload', upload.single('image'),  (req,res) => {
  const body = req.file;
  console.log(body);

  const base64Data = new Buffer(JSON.stringify(body)).toString("base64");

  console.log(base64Data);
}

和我的console.log(body)给予

{ fieldname: 'image',
  originalname: '21329726_1866651723650020_188839340_o.jpg',
  encoding: '7bit',
  mimetype: 'image/jpeg',
  destination: './pics/',
  filename: '5146c9818ff517c426e34ad84ff3513f',
  path: 'pics/5146c9818ff517c426e34ad84ff3513f',
  size: 94093 
}

现在问题出在这里-

1-我不想将我的image/pdf文件上传到任何文件夹中,但是它正在'./pics/'中上传。

2-我想在cloudinary中上传该文件,这就是为什么我要生成该文件的base64的原因,但是当我生成base64并将其上传到云中时,错误。

我认为这不是用base64编码的正确方法,或者我编码的数据格式错误。

请帮助我。

2 个答案:

答案 0 :(得分:1)

我建议您使用multiparty。一个简单的解决方案可以处理表单数据。 您可以在这里上传文件而无需保存。我正在使用它在AWS S3

中保存文件
router.post('/upload',(req,res)=>{
 let form = new multiparty.Form();
    form.parse(req, function(err, fields, files) {
       //here files is array
       const base64Data = new Buffer(JSON.stringify(body)).toString("base64");
       console.log(base64Data);

    });

});

否则,您只需忽略dest对象。该文件将存储在内存中,而不是物理位置:

答案 1 :(得分:1)

通过提供选项对​​象(在本例中为{dest:'./pics/'}),您告诉multer您想要将文件存储在该目录中。而是将其配置为将文件保存在内存中:

var storage = multer.memoryStorage()
var upload = multer({ storage: storage })

根据文档,file对象还应包括一个buffer属性,该属性包含文件数据。您应该可以做到:

console.log(body.buffer.toString("base64"));