gpt4 book ai didi

javascript - 使用 AngularJS 和 $http.post 在 MVC 应用程序中下载文件

转载 作者:行者123 更新时间:2023-11-30 17:12:30 24 4
gpt4 key购买 nike

我们非常欢迎并非常感谢任何帮助。

我有一个重试来自 Web 服务的文件内容的 MVC 操作。此操作是使用 $http.post(action, model) 从 Angular 服务(位于 services.js 中)调用的,并且该操作返回一个 FileContentResult 对象,该对象包含字节数组和内容类型。

public ActionResult DownloadResults(DownloadResultsModel downloadResultsModel)
{
downloadResult = ... // Retrieving the file from a web service
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", downloadResult.FileName));
Response.BufferOutput = false;
return new FileContentResult(downloadResult.Contents, downloadResult.ContentType);
}

我遇到的问题是浏览器没有执行处理文件的默认行为(例如,提示打开、保存或取消)。具有文件内容和文件名(注入(inject)到 FileContentResult 对象)的操作已成功完成,但浏览器没有响应。

当我用 $window.location.href 替换帖子,并自己构建 URI 时,我点击了操作,完成后浏览器正在按预期处理文件。

有没有人能想到如何按预期完成“帖子”?

谢谢,

埃拉德

最佳答案

我正在使用下面的代码下载文件,前提是该文件确实存在于服务器上并且客户端正在向服务器发送文件的完整路径...

根据您的要求更改代码以指定服务器本身的路径。

    [HttpGet]
public HttpResponseMessage DownloadFile(string filename)
{
filename = filename.Replace("\\\\", "\\").Replace("'", "").Replace("\"", "");
if (!char.IsLetter(filename[0]))
{
filename = filename.Substring(2);
}

var fileinfo = new FileInfo(filename);
if (!fileinfo.Exists)
{
throw new FileNotFoundException(fileinfo.Name);
}

try
{
var excelData = File.ReadAllBytes(filename);
var result = new HttpResponseMessage(HttpStatusCode.OK);
var stream = new MemoryStream(excelData);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = fileinfo.Name
};
return result;
}
catch (Exception ex)
{
return Request.CreateResponse(HttpStatusCode.ExpectationFailed, ex);
}
}

然后在客户端 Angular :

    var downloadFile = function (filename) {
var ifr = document.createElement('iframe');
ifr.style.display = 'none';
document.body.appendChild(ifr);
ifr.src = document.location.pathname + "api/GridApi/DownloadFile?filename='" + escape(filename) + "'";
ifr.onload = function () {
document.body.removeChild(ifr);
ifr = null;
};
};

关于javascript - 使用 AngularJS 和 $http.post 在 MVC 应用程序中下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26708704/

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