C# ASP NET MVC 4:如何从控制器返回文件以使用angularJs查看?

C# ASP NET MVC 4:如何从控制器返回文件以使用angularJs查看?,c#,angularjs,asp.net-mvc,asp.net-mvc-4,C#,Angularjs,Asp.net Mvc,Asp.net Mvc 4,我想从服务器下载一个文件,但我不明白我做错了什么。我一直在寻找如何做到这一点,但没有成功。这是我发现的一个例子: 控制器(ASP NET MVC): 角度控制器: $scope.downloadFiles = function () { var filename = "aae49c8e-c523-4ccc-a7ba-88f405072047&file.pdf"; $http({ method: 'G

我想从服务器下载一个文件,但我不明白我做错了什么。我一直在寻找如何做到这一点,但没有成功。这是我发现的一个例子:

控制器(ASP NET MVC):

角度控制器:

    $scope.downloadFiles = function () {
        var filename = "aae49c8e-c523-4ccc-a7ba-88f405072047&file.pdf";           
        $http({
              method: 'GET',
              url: 'serv/Consultas/GetFile',
              params: { filename: filename },
              responseType: "arraybuffer"
      }).success(function (response) {
            var file = new Blob([(response)], { type: 'application/pdf' });
            var fileURL = URL.createObjectURL(file);
            $window.open(fileURL);                    
      }).error(function (data, status) {
         console.log("Request failed with status: " + status);
      });
   }

当我加载文件时,我只得到不完整的文件名“aae49c8e-c523-4ccc-a7ba-88F40507247”,不加载文件。感谢您的帮助。

从服务器上以流式传输文件:

public FileStreamResult GetFile(string filename)
{
    try
    {
        if (!string.IsNullOrEmpty(filename))
        {
            //string filePath = HttpContext.Current.Server.MapPath("~/App_Data/") + fileName;
            DirectoryInfo dirInfo = new DirectoryInfo(HostingEnvironment.MapPath("~/Documentos"));
            string filePath = dirInfo.FullName + @"\" + filename;

            FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
            return File(fs, "application/pdf");
        }
        return new HttpResponseMessage(HttpStatusCode.NotFound);
    }
    catch (Exception)
    {
        return new HttpResponseMessage(HttpStatusCode.BadRequest);
    }
}
使用URL to action方法打开新窗口,该方法将对PDF进行流式处理,以便在浏览器中显示:

var fileURL = 'serv/Consultas/GetFile?filename=file.pdf';
$window.open(fileURL);

我已经更改了名称以探索您的建议,但我可以看到我得到了以下信息:“localhost:58334/53464c98-71b5-4e3c-afd7-0ad334490255”当我尝试加载文件时,我刚刚发送了:var filename=“file.pdf”我想我的问题在angular controller中,您有接收文件并下载的示例吗?从您的angular代码,看起来您正在下载PDF文件,然后将其转换并在窗口中显示。我假设您这样做是为了让用户可以在浏览器上查看PDF。是否正确?是的,我想在视图中显示PDF文件。另一个选择是通过一个简单的链接下载pdf文件。我想你要做的是打开窗口,让服务器从服务器上传输文件,而不是下载它。我已经更新了我的答案。注意,操作方法的返回类型是
FileStreamResult
,我直接返回
文件
,并且没有为返回的流指定文件名。如果您确实指定了文件名,它将提示用户下载。谢谢Andrés,它可以工作=)我已经将url放在超链接中,还有一个问题,如何强制浏览器显示“安全设置为…”对话框?友好提示:接受答案。
var fileURL = 'serv/Consultas/GetFile?filename=file.pdf';
$window.open(fileURL);