在不使用Return的情况下执行FileContentResult



如何使用return命令在不结束操作的情况下下载csv文件?

我想要一个可以下载csv文件并继续使用操作逻辑的操作。是否可以在不实际结束操作并从控制器返回的情况下启动请求?类似的东西:

public IActionResult AddOrdersExtension(OrderVM orderVM)
{
if (ModelState.IsValid)
{
StringBuilder sb = new StringBuilder();
//Header             
sb.Append("Product,Empty,Name,Address1,Address2,City,State,zip,Country,Phone,Quantity,Weight");
FileContentResult fr = File(Encoding.ASCII.GetBytes(sb.ToString()), "text/csv", 
"Error_log.csv");
//
//execute csv download
//
// continue with function
return View(orderVM.Orders); // return from action when logic is done
}//end function

根据您的代码,以下是内存中的操作:

FileContentResult fr = File(Encoding.ASCII.GetBytes(sb.ToString()), "text/csv", 
"Error_log.csv");

请再次从服务器下载该文件—您需要存储该文件。不确定为什么要在此处下载文件!但如果你想,你可以把文件保存到一个临时文件夹,下载然后删除文件,如下所示:

FileContentResult fr = File(Encoding.ASCII.GetBytes(sb.ToString()), "text/csv", "Error_log.csv");

//对于并发访问,使用动态名称文件名

//保存到磁盘

File.WriteAllBytes( "~/tmp/Error_log.csv", ((FileContentResult)fr).FileContents);

//下载

string remoteUri = "http://www.yourdomain.com/tmp/";
string fileName = "Error_log.csv_downloaded", myStringWebResource = null;

//创建一个新的WebClient实例并下载文件

using (WebClient myWebClient = new WebClient())
{
myStringWebResource = remoteUri + fileName;
// Download the Web resource and save it into the current filesystem folder.
myWebClient.DownloadFile(myStringWebResource, fileName);        
}

//删除两个文件

var fullPath = Server.MapPath("~/tmp/Error_log.csv");
if (File.Exists(fullPath))
{
File.Delete(fullPath);
}
fullPath = Server.MapPath("~/tmp/Error_log.csv_downloaded");
if (File.Exists(fullPath))
{
File.Delete(fullPath);
}

可能存在一些语法错误,需要添加参考库。但我希望你能得到你想要的解决方案。

相关内容

最新更新