adn*_*n98 4 javascript csv reactjs
在我的应用程序中,我需要在计算机上保存来自 API 响应的 CSV 文件。发送 POST 请求的函数是(我使用的是 Redux):
export const postCsv = sensorData => (dispatch, getState) => {
const token = getState().auth.token;
// Headers
const config = {
headers: {
'Content-Type': "application/json"
}
}
// If token exists, add to headers config
if (token) {
config.headers['Authorization'] = `Token ${token}`
}
// Post request to API
axios.post(`${baseURL}/sensors_data/csv`, sensorData, config)
.then(res => {
console.log(res);
if (res.status === 200) {
dispatch({
type: POST_CSV,
payload: res.data
})
}
})
.catch(err => {
console.log(err.response);
})
}
Run Code Online (Sandbox Code Playgroud)
API 的响应是:
我在单击按钮后执行 postCsv 函数。可以看到,响应码是200,所有数据都已正确发送。我只是不知道应该做什么来下载并保存文件。有人可以帮忙吗?
小智 14
const downloadFile = () => {
const url = window.URL.createObjectURL(new Blob([response.data]))
const link = document.createElement('a')
link.href = url
link.setAttribute('download', "yourfilename.csv")
document.body.appendChild(link)
link.click()
link.remove()
}
Run Code Online (Sandbox Code Playgroud)
正如@cocco在此线程中所建议的,您可以动态生成具有该download
属性的锚点。
注意:为了简单起见,我将演示使用一个具有返回数据的静态方法的useEffect
伪服务从 API 获取数据部分。但希望您能了解总体思路。HttpClient
get
import React, { useState, useEffect } from "react";
import HttpClient from "./HttpClient";
import "./style.css";
export default function App() {
const [dataInCSV, setDataInCSV] = useState("");
useEffect(() => {
HttpClient.get().then(res => setDataInCSV(res));
}, []);
return (
<div>
{dataInCSV && (
<a
href={`data:text/csv;charset=utf-8,${escape(dataInCSV)}`}
download="filename.csv"
>
download
</a>
)}
</div>
);
}
Run Code Online (Sandbox Code Playgroud)
这是供您参考的工作示例代码示例。
归档时间: |
|
查看次数: |
15915 次 |
最近记录: |