首页 > Web开发 > 详细

js React中post方式下载文件/get方式下载文件

时间:2020-04-10 18:26:07      阅读:198      评论:0      收藏:0      [点我收藏+]

一.GET方式下载

方法一:

<a href={systemPdf} download="application/pptx" target="_blank">下载</a>

方法二:

downloadHandler = () => {
   const url = ‘../action?id=3‘
   window.location.href = url
}
<span onClick={this.downloadHandler}>下载</span> 

缺点get请求参数数据量较小可以使用,如果请求参数数据量较大,一般使用post

二.POST方式下载

import React from ‘react‘;
const Ajax = require(‘axios‘);
//server start
export function request(url, options, isDemo = true) {
    //可删除 start
    if (isDemo) {
        let response = {
            data: {},
            fileName: ‘demo.xlsx‘,
            success: true,
            headers: { ‘content-type‘: ‘application/octet-stream‘, ‘content-disposition‘: ‘la=1;fileName=demo.xlsx‘ },
            responseType: options.responseType
        }
        if (response.headers[‘content-type‘] === ‘application/octet-stream‘) {
            let fileName = decodeURI(response.headers[‘content-disposition‘].split(‘;‘)[1].split(‘=‘)[1])
            return { data: response.data, success: true, fileName, }
        }
    }
//可删除 end return Ajax({ method: options.method || "POST", url: url, data: options.data || {}, params: options.params || {}, responseType: options.responseType || ‘arraybuffer‘ }).then((res) => { if (content) { return { data: res.data, success: true, fileName } } if (res.success) { return { data: res.data, success: true, } } }) }; export async function downloadQuery(data, responseType = ‘arraybuffer‘) { return request("/erp/api/query/data", { method: "POST", data, responseType }); } //server end class Demo extends React.Component { //modal start dowmloadQuery = async (data) => { const res = await downloadQuery(data); console.log(res, "ressss") //这里是发送ajax请求的返回值 let blob = new Blob([res.data], { type: ‘application/vnd.openxmlformats-officedocument.spreadsheetml.sheet‘ }); //这里表示xlsx类型 if (window.navigator.msSaveOrOpenBlob) { navigator.msSaveBlob(blob, res.fileName) } else { let downloadElement = document.createElement(‘a‘); let href = window.URL.createObjectURL(blob); // 创建下载的链接 downloadElement.href = href; downloadElement.download = res.fileName; // 下载后文件名 document.body.appendChild(downloadElement); downloadElement.click(); // 点击下载 document.body.removeChild(downloadElement); // 下载完成移除元素 window.URL.revokeObjectURL(href); // 释放掉blob对象 } }; //modal end //view start render = () => { return ( <div> < button onClick={this.dowmloadQuery}>点击并下载</button> </div>); } //view end } export default Demo;

点击结果如下:

技术分享图片

 

注意:

  1. 直接通过ajax的post的方式无法调用浏览器的下载功能
  2. 请求时responseType必须设置为:‘arraybuffer‘后端一般返回的‘content-type‘: ‘application/octet-stream‘

 

 

 

js React中post方式下载文件/get方式下载文件

原文:https://www.cnblogs.com/sunxiaopei/p/12674973.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!