axios 如何在取回二进制文件后,在浏览器上将响应作为附件下载?

siv3szwd  于 2022-11-05  发布在  iOS
关注(0)|答案(1)|浏览(139)

我正在向一个端点发送一个API请求,它应该会给予我一个powerpoint文件。
然而,在我的回答中,它是一堆二进制代码。
标头为内容类型:'应用程序/八位字节流'
例如,

"PK\u0003\u0004\u0014\u0000\u0000\u0000\b\u0000�\u0015'U��O�.\u000

下面是调用API的代码中的axios,

export const getPtt = pptRequests => {
  const response = new Promise((resolve, reject) => {
    axios
      .post(
        `url`,
        pptRequests 
      )
      .then(data => {

        resolve(data)
      })
      .catch(err => {
        reject(err)
      })
  })
return response 

}

我可以知道如何解码的二进制代码,所以我可以使它将下载后,如下图发送出去
编辑:
在这里调用函数

const handleGeneratePtt = () => {

    const pptRequests  = getPttRequests()
    getPtt (pptRequests ) // how to make it start downloading a ppt?

  }

Edit:

    export const getPtt = pptRequests => {
      const response = new Promise((resolve, reject) => {
        axios
          .post(
            `url`,
            pptRequests 
          )
          .then(data => {
const blob = new Blob([new Uint8Array(response.data)])
            const url = window.URL.createObjectURL(blob)
            const a = document.createElement('a')
            a.setAttribute('style', 'display:none;')
            document.body.appendChild(a)
            a.href = url
            a.download = 'filename'
            a.click()
            a.remove()
            resolve(data)
          })
          .catch(err => {
            reject(err)
          })
      })
    return response 

    }
lnlaulya

lnlaulya1#

将您的数据转换为blob(无论是base64octatearraybuffer等)

const blob = new Blob([data])

创建对象URL

const url = window.URL.createObjectURL(blob)

创建隐藏的dom元素(使其在所有浏览器中工作)

const a = document.createElement('a');
a.setAttribute('style', 'display:none;');
document.body.appendChild(a);

将文件附加到隐藏元素,然后单击隐藏元素下载。

a.href = url;
a.download = filename;
a.click();
a.remove();

只需确保将数据转换为blob

相关问题