怎么使用form表单通过Post方式从服务器下载文件 React

下面一种方法百度出来的,试了下发现不行

// 3.1)首先在react组件的render函数里面建立一个隐藏的div ,例如:
<div id='downloadDiv' style={{display:'none'}}></div>  

//3.2 )  用户在页面上触发下载按钮后,执行以下函数:在隐藏的div里面创建临时表单,获取表单,提交表单,在div节点卸载临时表单。

downloadDetailData=()=>{  
  
var divElement= document.getElementById("downloadDiv");  
var downloadUrl=`${apiBasePath}/api/xxxxx/downloadDetailData`;  
var params=JSON.stringify({  
     key:'value'  
})  
ReactDOM.render(  
      <form action={downloadUrl} method="post">  
        <input name="params" type="text" value={params}/>   
      </form>,  
      divElement  
  )  
ReactDOM.findDOMNode(divElement).querySelector('form').submit();  
ReactDOM.unmountComponentAtNode(divElement); 
 
} 
阅读 5.4k
2 个回答
let formElement = document.createElement('form');
formElement.style = "display:none;";
formElement.method = 'post';
formElement.action = `${apiBasePath}/api/xxxxx/downloadDetailData`;
formElement.target = 'callBackTarget';
let inputElement = document.createElement('input');
inputElement.type = 'hidden';
inputElement.name = "params" ;
inputElement.value = params;
formElement.appendChild(inputElement);
document.body.appendChild(formElement);
formElement.submit();
document.body.removeChild(formElement);

看人家返回给你的是什么内容了,如果是blob,这样

jsFileDownload (filename, data, mime) {
    let blob = new Blob([data], {type: mime || 'application/octet-stream'})
    if (typeof window.navigator.msSaveBlob !== 'undefined') {
      window.navigator.msSaveBlob(blob, filename)
    } else {
      var blobURL = window.URL.createObjectURL(blob)
      var tempLink = document.createElement('a')
      tempLink.style.display = 'none'
      tempLink.href = blobURL
      tempLink.setAttribute('download', filename)
      if (typeof tempLink.download === 'undefined') {
        tempLink.setAttribute('target', '_blank')
      }
      document.body.appendChild(tempLink)
      tempLink.click()
      document.body.removeChild(tempLink)
      window.URL.revokeObjectURL(blobURL)
    }
  }

如果是url,那就很简单了,没必要我写了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏