javascript - 将 FileReader.readAsText() 结果字符串转换回文件对象以供下载?
问题描述
我有一个文件上传组件,其中使用 fileReader.readAsText() 处理文件,然后转换为 base64 并发送到服务器。
问题是我还需要允许用户再次下载文件。我已经对其进行了解码,尝试转换为 ArrayBuffer(除其他外)然后下载但没有成功。我已经对 SO 进行了全面研究,但没有发现任何东西。这就是我尝试下载的方式:
downloadFile (type) {
// the file is already decoded at this point and is the result of
// fileReader.readAsText()
var reader = new FileReader()
var blob = new Blob([this.uploadedFile])
reader.onload = function () {
var temp = reader.result
var a = document.createElement('a')
a.download = 'test.pdf'
a.href = window.URL.createObjectURL(new Blob([temp], {type: 'application/pdf'}))
a.dataset.downloadurl = [a.download, a.href].join(':')
a.click()
}
reader.readAsArrayBuffer(blob)
}
一旦它出来,它只会下载一个空白 PDF(我还必须支持 .rtf、.odf、.doc、.docx。)也许我只是有错误的数据格式?
解决方案
想出了解决办法。而不是做 fileReader.readAsText() 我改为 fileReader.readAsDataURL() 然后下载现在看起来像这样
downloadFile() {
var a = document.createElement('a')
a.download = fileName
a.href = fileData
a.dataset.downloadurl = [a.download, a.href].join(':')
a.click()
}
问题确实是一开始的错误数据格式!
推荐阅读
- ssl - cURL 错误 60:SSL 证书问题:证书已过期
- javascript - 显示/隐藏密码 onClick 使用 Vanilla js
- lwc - Lightning Web 组件反应性和非反应性属性
- r - r中数据框列表的总和行
- python - 基于 PySpark 数据帧中的相同列表更新多个列
- discord.py - 我如何做到这一点,以便我的机器人在 discord.py rewrite 中有 3 个警告时自动踢人
- python-3.x - 使用 pathlib 模块从 rglob() 方法的输出中解压缩所有项目
- javascript - 设置状态不起作用反应钩子(字符串)异步存储
- python-3.x - 将像素值映射到热图像上的温度值
- git - 在 VSCode 的 git repo 中查看隐藏文件夹的终端命令是什么?