【问题标题】:Read blob file in base64 and upload on the server读取base64中的blob文件并上传到服务器
【发布时间】:2018-04-12 18:02:44
【问题描述】:

当我将文件放到上传区域时,React-dropzone 返回一个对象,例如:

let picture = [
    {
        "rawFile": {
            "preview": "blob:http://localhost:3000/ff851b03-b2c0-4212-9240-8d07057ad47d"
        },
        "src": "blob:http://localhost:3000/ff851b03-b2c0-4212-9240-8d07057ad47d",
        "title": "1397-01-20 13.43.24.jpg"
    }
]

我阅读了这个链接并尝试上传文件:React dropzone, how to upload image?

但我认为文件不会被发送。

这是我的代码:

let formData = new FormData();
formData.append('file', picture[0]);
fetch('http://localhost:8000/api/media', {
 method: 'POST',
 body: formData
});

如果这种方法不正确,如何将文件发送到服务器端并在服务器端接收?

在服务器端,我使用的是 Hapij。

【问题讨论】:

    标签: javascript node.js reactjs blob react-dropzone


    【解决方案1】:

    我解决了这个问题。我写答案是因为没有人回答这个问题。

    在客户端,我使用FileReader API 读取BLOB 数据并将其转换为base64 可读格式。我编写了一个函数来将 blob 转换为 base64 并将 fileNamebase64 发送到服务器端。

    const convertFileToBase64 = file => new Promise((resolve, reject) => {
        const reader = new FileReader();
        reader.readAsDataURL(file.rawFile);
    
        reader.onload = () => resolve({
            fileName: file.title,
            base64: reader.result
        });
        reader.onerror = reject;
    });
    

    在服务器端,我通过这个函数将缓冲区写入文件:

    const fs = require("fs");
    const Boom = require('boom');
    
    function convertBase64ToFile(file) {
    
      let base64Data = file.base64.split(',')[1];
    
      fs.writeFile(`${__dirname}/../../uploads/${file.fileName}`, base64Data, 'base64', function(err) {
        return Boom.badData(err);
      });
    
      // Other actions...
    
    }
    

    这个方法非常适合我。

    【讨论】:

    猜你喜欢
    • 2014-10-20
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 2021-06-07
    • 2022-01-18
    • 2012-06-19
    相关资源
    最近更新 更多