gpt4 book ai didi

c# - 从 Controller 下载文件

转载 作者:太空狗 更新时间:2023-10-30 00:30:36 26 4
gpt4 key购买 nike

在 Aspnet5 RC1 update1 web 应用程序中,我尝试执行与 Response.BinaryWrite 相同的操作,在旧的 AspNet 应用程序中下载文件。

用户需要在客户端弹出保存对话框。

使用以下代码时,客户端会弹出保存文件的提示:

public void Configure(IApplicationBuilder app)
{
//app.UseIISPlatformHandler();
//app.UseStaticFiles();
//app.UseMvc();
app.Run(async (objContext) =>
{
var cd = new System.Net.Mime.ContentDisposition {
FileName = "test.rar", Inline = false };
objContext.Response.Headers.Add("Content-Disposition", cd.ToString());
byte[] arr = System.IO.File.ReadAllBytes("G:\\test.rar");
await objContext.Response.Body.WriteAsync(arr, 0, arr.Length);
});
}

但是当在 Controller 的操作中使用相同的代码时,app.Run 被注释掉,不会出现保存弹出窗口,内容只是呈现为文本。

[Route("[controller]")]
public class SampleController : Controller
{
[HttpPost("DownloadFile")]
public void DownloadFile(string strData)
{
var cd = new System.Net.Mime.ContentDisposition {
FileName = "test.rar", Inline = false };
Response.Headers.Add("Content-Disposition", cd.ToString());
byte[] arr = System.IO.File.ReadAllBytes("G:\\test.rar");
Response.Body.WriteAsync(arr, 0, arr.Length);

控制流需要到达 Controller ,执行一些逻辑,然后将byte[]响应内容发送到客户端,然后用户需要保存文件。没有 cshtml,只有带有 jquery ajax 调用的纯 html。

最佳答案

你真的需要HttpPost属性吗?尝试删除它或改用 HttpGet:

public async void DownloadFile()
{
Response.Headers.Add("content-disposition", "attachment; filename=test.rar");
byte[] arr = System.IO.File.ReadAllBytes(@"G:\test.rar");
await Response.Body.WriteAsync(arr, 0, arr.Length);
}

已更新:使用 FileStreamResult 可能更容易:

[HttpGet]
public FileStreamResult DownloadFile() {
Response.Headers.Add("content-disposition", "attachment; filename=test.rar");
return File(new FileStream(@"G:\test.rar", FileMode.Open),
"application/octet-stream"); // or "application/x-rar-compressed"
}

关于c# - 从 Controller 下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34605655/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com