当前位置: 首页 > 知识库问答 >
问题:

将ReactJS对象下载为文件

吴哲
2023-03-14

我正在用连接到Express API服务器的ReactJS前端构建一个应用程序。对API的调用是使用Ajax进行的。

在我的一个视图中,一个表在每一行加载了“导出”链接。导出链接导致一个React路由,该路由调用一个APIendpoint,该endpoint提供一个要下载的CSV文件。

下面是接收数据的JSX:

module.exports = React.createClass({

    mixins: [Router.State],
    getInitialState: function() {
        return {
            auth: getAuthState(),
            export: [],
            passedParams: this.getParams()
        };
    },

    componentDidMount: function(){
        $.ajax({
            type: 'GET',
            url: ''+ API_URL +'/path/to/endpoint'+ this.state.passedParams.id +'/export',
            dataType: 'text',
            headers: {
                'Authorization': 'Basic ' + this.state.auth.base + ''
            },
            success: function (res) {
                // can I force a download of res here?
                console.log('Export Result Success -- ', res);
                if(this.isMounted()){
                    console.log('Export Download Data -- ', res);
                    this.setState({export: res[1]});
                    // adding the next three lines solved my problem
                    var data = new Blob([res], {type: 'text/csv'});
                    var csvURL = window.URL.createObjectURL(data);
                    //window.open(csvURL);
                    // then commenting out the window.open & replacing
                    // with this allowed a file name to be passed out
                    tempLink = document.createElement('a');
                    tempLink.href = csvURL;
                    tempLink.setAttribute('download', 'filename.csv');
                    tempLink.click();
                }
            }.bind(this),
            error: function (data) {
                console.log('Export Download Result Error -- ', data);
            }
        });
    },

    render: function(){
        console.log('exam assignment obj -- ', this.state.passedParams.name);
        var theFileContents = this.state.export;
            return(
            <div className="row test-table">
                <table className="table" >
                    <tr className="test-table-headers">
                    {theFileContents} // this loads the contents
                    // can I auto download theFileContents?
                    </tr>
                </table>
            </div>
            )
    }
});

共有1个答案

齐思淼
2023-03-14

根据@blex的注释添加了以下代码,从而使文件下载工作正常。要在上下文中了解它,请看问题中的success回调。

var data = new Blob([res], {type: 'text/csv'});
var csvURL = window.URL.createObjectURL(data);
tempLink = document.createElement('a');
tempLink.href = csvURL;
tempLink.setAttribute('download', 'filename.csv');
tempLink.click();
 类似资料:
  • 我目前正在做一个个人投资组合,我试图制作一个按钮,如果你点击它,应该下载一份简历。 代码 让用户下载该文件。 我在REACTJS中工作,创建react应用程序

  • 问题内容: 我有以下代码,可让用户下载csv文件中的数据字符串。 如果客户端运行代码,它将生成空白页并开始下载csv文件中的数据,效果很好。 所以我试图用JSON对象来做到这一点 但是我只看到一个页面,上面显示了JSON数据,没有下载它。 我进行了一些研究,并且该研究声称可以工作,但是我的代码没有任何区别。 我在代码中缺少什么吗? 问题答案: 这是我为应用程序解决的方式: HTML: JS(纯JS

  • 问题内容: 我正在使用AngularJS和Spring编写应用程序。我想将请求发送到服务器,并将控制器返回的响应下载为文件。在控制器中,我有csv文件的内容(作为字符串),即(1行4列)。将此响应下载为文件的最简单方法是什么? 下面,我发布了我的简化代码。在Spring控制器中: 在javascript(AngularJS)中 我也在尝试(在下面)写入响应流,设置标头,但是在客户端,我总是以字符串

  • 本文向大家介绍JSP隐含对象response实现文件下载,包括了JSP隐含对象response实现文件下载的使用技巧和注意事项,需要的朋友参考一下 一.简单介绍JSP隐含对象response实现文件下载 (1)在JSP中实现文件下载最简单的方法是定义超链接指向目标资源,用户单击超链接后直接下载资源,但直接暴露资源的URL也会带来一些负面的影响,例如容易被其它网站盗链,造成本地服务器下载负载过重。

  • 问题内容: 这是其中的代码 返回的响应是一个文件。我希望用户能够将其保存为文件,但是什么也没有发生。我认为服务器返回的响应类型正确,因为在控制台中它说 我想念的是什么?我应该在减速器中做什么? 问题答案: 浏览器技术当前不支持直接从Ajax请求下载文件。解决方法是添加一个隐藏的表单并将其提交到幕后,以使浏览器触发“保存”对话框。 我正在运行标准的Flux实现,因此不确定确切的Redux(Reduc

  • 问题内容: 我正在使用Universal-Image- Loader,并且有此功能可以从SD卡访问图像的文件缓存。但是我不知道如何将返回的文件缓存转换为位图。基本上,我只是想将位图分配给ImageView。 错误: “ ImageView类型的setImageBitmap(Bitmap)方法不适用于参数(文件)” 问题答案: 您应该可以使用: