在 .NET 核心中以原子方式下载 CSV 文件

Posted

技术标签:

【中文标题】在 .NET 核心中以原子方式下载 CSV 文件【英文标题】:Atomically download a CVS file in .NET core 【发布时间】:2021-09-05 04:37:55 【问题描述】:

我正在控制器中以 StringBuilder 的格式制作动态 CVS 报告文件。我已尝试使用此代码返回文件:

公共异步任务 GetCvsAsync(....) …… //制作文件

        using (MemoryStream stream = new MemoryStream())
        
            StreamWriter objstreamwriter = new StreamWriter(stream);
            objstreamwriter.Write(res.ToString());
            objstreamwriter.Flush();
            objstreamwriter.Close();
            return File(stream.ToArray(), "application/octet-stream", "test.csv");
        

     

它会产生正确的结果,但在控制台响应标头中(前面没有任何反应),如下所示:

如果我右键单击控制台并单击在新选项卡中打开,它将开始下载文件。我也试过这种方法:

var f = File(Encoding.UTF8.GetBytes(res.ToString()), "text/csv", "authors.csv");
return f;

res 属于 StringBuilder 类型。

我想在文件准备好后自动开始下载,我不知道该怎么办。

注意: 此操作由我的剃须刀页面上的 href 标记 onClick 事件调用:

function cvs(meID, oID, tID) 
        $.get("/Dashboard/GetCVS?meID=" + meID
            + "&oID=" + oID+ "&tID=" + tID);
    

【问题讨论】:

我不清楚您具体描述的是什么行为。当您右键单击链接并在新选项卡中打开时,它会按预期下载文件吗?但是,当您通常单击链接时,它不会吗?它做了什么? 我不是说我右键点击链接,我说的是我右键点击控制台响应的时候(图中)。事实上,前面没有发生任何事情(如果我检查控制台我可以看到这个结果)。现在清楚了吗? 啊,看起来问题是您正试图通过 AJAX 下载文件,但客户端代码没有对响应做任何事情。这回答了你的问题了吗? Download File Using javascript/jQuery 这很有帮助@David 谢谢你。 【参考方案1】:

我无法用 jquery 解决我的问题,我只是将我的代码更改为直接调用我的操作而不是 ajax 调用,我的问题就解决了!

【讨论】:

以上是关于在 .NET 核心中以原子方式下载 CSV 文件的主要内容,如果未能解决你的问题,请参考以下文章

django生成CSV文件

如何在 BigQuery 客户端 Python API 中以原子方式覆盖表

在 Windows 中以编程方式复制、重命名和粘贴文件的最佳方法

在 C++11 中以无锁方式原子交换两个 std::atomic<T*> 对象?

在 .net 中以编程方式解压缩文件

在 pyspark 中以 csv 格式读取 excel 文件