Javascript如何将Base 64 url​​转换为文件?

Posted

技术标签:

【中文标题】Javascript如何将Base 64 url​​转换为文件?【英文标题】:Javascript How to convert Base 64 url to file? 【发布时间】:2020-10-16 14:20:36 【问题描述】:

我正在从数据库中检索文件数据,我需要发送到前端(我的前端有下载操作来下载文件)如何将这些类型的 url 转换为文件。我希望它可以用于任何文件类型(doc、txt、jpg、pdf、zip .....)

"data:text/plain;charset=utf-8;base64,MzQuNjIzNjU..................."

这是我的实现。它适用于 txt,但由于某些原因,它不适用于 jpg 和其他文件类型。任何人都可以帮我解决这个问题吗? (我认为可能是编码或解码问题)谢谢:)

        let mime = file.url.split(',')[0].split(':')[1].split(';')[0];
        console.log(mime);
        let content = unescape(encodeURIComponent(file.url.split(',')[1]));
        content = Buffer.from(content, 'base64').toString();

        console.log(content);

        let temp = mime + ";charset=UTF-8";
        res.set('Content-Type', temp);
        res.set('Content-Disposition','attachment; filename=' + file.name );
        res.send(content);

【问题讨论】:

【参考方案1】:

试试下面希望这会奏效:-

 //return a promise that resolves with a File instance
    function urltoFile(url, filename, mimeType)
        return (fetch(url)
            .then(function(res)return res.arrayBuffer();)
            .then(function(buf)return new File([buf], filename,type:mimeType);)
        );
    
    
    //Usage example:
    urltoFile('data:text/plain;base64,aGVsbG8gd29ybGQ=', 'hello.txt','text/plain')
    .then(function(file) console.log(file););

【讨论】:

【参考方案2】:

您可以使用content = new Buffer(content, 'base64')

如果你想把它保存到一个文件中,你可以使用这个:

/* name is the name of the file you want to save your file in.*/
fs.writeFile(name , content, encoding: 'base64', function(err)
  if (err) console.log('err', err);
  console.log('success');
);

【讨论】:

以上是关于Javascript如何将Base 64 url​​转换为文件?的主要内容,如果未能解决你的问题,请参考以下文章

js中的blob,base64,url之间的关系

javascript Url 传参的坑,base64参数和url参数之间的转移

将base64URL解码为base64 - Swift

将 AWS KMS ECDSA_SHA_256 签名从 DER 编码的 ANS.1 格式转换为 JWT base64url 编码的 R || NodeJS/Javascript 中的 S 格式

如何将 Firebase 上传图片的图片下载 URL 转换为 base64

如何将 URL 从 Webapi 传递到 <img> 标签以接受 base64 的图像?