CSV文件作为单个字符串返回

CSV file being returned as a single string

本文关键字:字符串 返回 单个 文件 CSV      更新时间:2023-09-26

以下是相关代码:

控制器:

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只是对正确URL的一个简单的单行$http.post函数。

问题:

当我使用上面的代码时,文件以CSV的形式下载,但仅以单个连续字符串的形式返回。然而,当我直接将URL发布到浏览器的位置栏时,下载的文件会被正确解析。我已经尝试过操作头以便请求text/csv,但它不起作用。出于某种原因,我不能在客户端使用解析器来解决这个问题(无论如何,我不想这样做。文件在服务器上完全可以。只需要下载它。)

我想问题出在客户端,因为我可以通过URL下载文件,但在哪里?我的$http.post有什么问题吗?

在设置链接之前尝试对其href进行编码。

hiddenElement.href = encodeURI("data:text/csv;charset=utf-8," + data);

工作js小提琴:http://jsfiddle.net/f6enw0L6/