首页 > 解决方案 > 将 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。)也许我只是有错误的数据格式?

标签: javascriptvue.jsdownload

解决方案


想出了解决办法。而不是做 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()
}

问题确实是一开始的错误数据格式!


推荐阅读