利用FormData向后端傳遞二進制流文件


之前在做項目的時候有一個需求是將本地的html文件導出為一個word文件,當時是用模板的方式導出word,函數的最后是生成一個blob對象,再利用saveAs()方法將文件下載到本地

  

現在的需求是將這個word文件生成一個http地址作為某個接口請求的一個參數,做后續操作。在項目中是通過請求 upload/xxx/xxx 地址獲取到文件的id再根據固定的格式拼接成http地址,現在的問題有兩個,一是怎么把 blob 對象轉成一個文件(模擬用戶點擊上傳按鈕獲取到的文件對象),二是怎么把這個文件轉成二進制流傳到后端,這個接口只認binary類型的參數

  

寫法如下:

        let file = new File([out], `${_this.filename}.docx`)
        console.log(file)
        let formData = new FormData()
        formData.append('file', file)
        axios({
          method: 'post',
          data: formData,
          url: uploadFileUrl()
        })
          .then(data => {
            let word = data.data.results[0]
            _this.wordName = word.fileName
            _this.wordUrl = fileUrl(word.fileId)
          })
          .catch(err => {
            console.error(err + '')
          })

  解釋:

    1、new File()和new Blob()相同的是,第一個參數都是一個數組。不同的是,new Blob()第二個參數是一個對象,里面可以指定文件的type,new File()的第二個參數是文件名稱;new Blob()的功能是將二進制流轉為blob對象,new File()的功能是將blob對象轉為文件格式,這個文件就相當於是使用 <input type='file' /> 選擇的FileList對象

    

    2、new FormData()就是將文件轉成二進制流,它就是binary。向表單中追加屬性值用append()方法

    3、模板方式導出word:https://www.cnblogs.com/wuqilang/p/14085382.html  如果不用導出只需將saveAs()方法注掉


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM