将FileReader.readAsText()结果字符串转换回文件对象以供下载?

时间:2018-06-29 15:36:54

标签: javascript vue.js download

我有一个文件上传组件,其中使用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。)也许我只是使用了错误的数据格式?

1 个答案:

答案 0 :(得分:0)

找出解决方案。我没有做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()
}

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