【问题标题】:How to encoded files in base64 in nodejs after getting details from client-side using multer使用multer从客户端获取详细信息后,如何在nodejs中以base64编码文件
【发布时间】:2018-08-11 10:36:58
【问题描述】:

我将文件详细信息从 Angular 发送到我的 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 中的编码方法不正确,或者我编码的数据格式错误。

请帮帮我。

【问题讨论】:

    标签: javascript node.js angular multer


    【解决方案1】:

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

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

    根据文档,file 对象还应该包含一个 buffer 属性,其中包含文件数据。你应该能够做到:

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

    【讨论】:

    • 给出错误Cannot read property 'toString' of undefined
    • @Rupesh 我刚刚更新了答案,您可以尝试这样配置吗?
    • 如何设置只有在获得完整文件时才转换为base64的条件。
    【解决方案2】:

    我建议您使用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 对象。该文件将存储在内存中,而不是物理位置:

    【讨论】:

    • 添加选项 'maxFieldsSize' 默认为 2mb。
    • 它正在获取大文件但编码不正确我认为对于大文件它在获取完整文件之前开始编码。
    • 选择文件时正在发送文件
    • @Rupesh 我正在使用相同的包。它最多可以解析 60mb。
    • 在nodejs端解析但不编码。你能检查一下编码吗,我已经写好了编码的代码。
    猜你喜欢
    • 1970-01-01
    • 2015-09-01
    • 2016-10-24
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多