我正在用连接到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>
)
}
});
根据@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)方法不适用于参数(文件)” 问题答案: 您应该可以使用: