reactjs - 使用 react-admin 从 API 响应的数据中下载文件
问题描述
我正在尝试在我的 react-admin 面板的 AppBar 中创建一个自定义按钮来下载数据库的转储。API 的响应是一个 json,其中包含有关请求的信息以及数据库的内容。
如何使用包含数据的 json 字段从客户端开始下载?我暂时这样做了:
const CustomAppBar = withStyles(styles)(({ classes, ...props }) => {
const dumpDatabase = () => {
fetch(config['api_url'] + '/dump', { method: 'GET' })
.then(data => data.json())
.then((json) => {
console.log(json['data']);
});
}
return (
<AppBar {...props}>
<Typography
variant="inherit"
color="inherit"
className={classes.title}
id="react-admin-title"
/>
<span className={classes.spacer} />
<Tooltip title="Dump Database">
<IconButton color="inherit" onClick={dumpDatabase} >
<SaveIcon />
</IconButton>
</Tooltip>
</AppBar>
);
});
这console.log(json['data']);
是我试图替换为下载的部分。一般来说,我对 reat-admin 和 javascript 的经验非常低...
解决方案
一段时间后,我找到了一个可以使用的有效解决方案。您必须创建一个 blob 对象并将其分配给链接,然后通过脚本自动单击它。
dumpDatabase = () => {
fetch(config['api_url'] + '/dump', { method: 'GET' })
.then(data => data.json())
.then(json => {
if (json['result'] === 'success')
{
// Creating the blob file and its url
var blob = new Blob([json['data']], {type: 'application/json'});
let url = window.URL.createObjectURL(blob);
var date = Moment(new Date()).format("YYYY_MM_DD-HH_mm_ss");
// Creating the hyperlink and auto click it to start the download
let link = document.createElement('a');
link.href = url;
link.download = 'dump_' + date + '.json';
link.click();
}
});
}
推荐阅读
- c - 作为指针的参数未正确递增
- php - 如何在 Laravel 中显示来自另一个磁盘的图像
- python - 如何在不知道密钥的情况下使用 python 程序解密 .txt.gz.enc 文件?
- sql - Oracle Developer - Hour Between 1 到 12 错误,在一台机器上工作但在另一台机器上工作
- ruby-on-rails - 如何动态地将主机添加到允许的 Rails 主机?
- javascript - 2 个不同的按钮,每个按钮从 2 个不同的唯一列表中随机生成
- java - 在Java中读取序列化对象
- jquery - Angular 中的高级 DOM 操作
- python-3.x - 有没有办法将 selenium 与 Opera GX 浏览器结合使用?
- flutter - Flutter PageView itemCount 变化导致PageController jumpToPage 跳转到错误页面