以下是相关代码:
控制器:
public ActionResult APIDownloadCSV()
{
var filename = Server.MapPath("~/xxx/test.csv");
byte[] content = System.IO.File.ReadAllBytes(filename);
return File(content, "text/csv", "test.csv");
}
使用Javascript:
var fetchCSV = function () {
return postDownloadCsv().then(function (data) {
var hiddenElement = document.createElement("a");
hiddenElement.href = "data:text/csv;charset=utf-8," + data;
hiddenElement.target = "_blank";
hiddenElement.download = "test.csv";
hiddenElement.click();
hiddenElement.remove();
});
}
postDownloadCSV
只是一个简单的单行$http.post
函数到正确的网址。
问题:
当我使用上面的代码时,文件将以CSV格式下载,但仅作为单个连续字符串返回。但是,当我直接将URL发布到浏览器的位置栏时,正确解析正在下载的文件。我已经尝试过操作标题,以便我正在请求text/csv
,但它无效。由于原因,我不能在客户端使用解析器来解决这个问题(不管怎样我都不想。服务器上的文件完全没问题。只需要下载它。)
我认为问题出在客户端,因为我可以通过URL下载文件,但在哪里?我的$http.post
错误了吗?
答案 0 :(得分:1)
在设置之前尝试对链接的href进行编码。
hiddenElement.href = encodeURI("data:text/csv;charset=utf-8," + data);
工作js-fiddle:http://jsfiddle.net/f6enw0L6/