【问题标题】:CSV file being returned as a single stringCSV 文件作为单个字符串返回
【发布时间】:2015-11-20 08:39:35
【问题描述】:

以下是相关代码:

控制器:

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 函数到正确的 URL。

问题:

当我使用上述代码时,文件以 CSV 格式下载,但仅以单个连续字符串的形式返回。但是,当我直接将 URL 发布到浏览器的地址栏时,正在下载的文件被正确解析。我尝试过操纵标头,以便我请求text/csv,但它不起作用。由于某些原因,我不能在客户端使用解析器来解决这个问题(反正我不想这样做。文件在服务器上完全没问题。只需要下载它。)

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

【问题讨论】:

    标签: javascript .net angularjs


    【解决方案1】:

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

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

    工作 js-fiddle:http://jsfiddle.net/f6enw0L6/

    【讨论】:

    • 你知道吗,这么简单的解决方案解决了困扰我几个小时的问题!谢谢你。一个当之无愧的接受。
    猜你喜欢
    • 2016-07-25
    • 2014-12-26
    • 2019-03-25
    • 2013-12-29
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    相关资源
    最近更新 更多