如何通过单击按钮查看位于服务器上的文件?

问题描述 投票:0回答:1

我点击一个按钮(按钮位于192.xxx.x.xxx \ Profile \ Details页面)传递给angularJS控制器文件,它调用API

$scope.docView = function () {     
    Method.getbyId("api call",docId).then(function(response) {
            if (response.data.message != null)
                window.open('//'+response.data.message);
            else
                alert("File Not Found !");
        }).catch(function (data) {
            console.log("Unknown Error");
        });
    }
}

API是:

    [Route("api call")]
    [HttpGet]
    public IHttpActionResult ViewDocument (Guid? docId)
    {
          /*background work*/            

                response.Message = filePath;
            }                
        }
        catch (Exception ex)
        {
            Utils.Write(ex);
        }

        return Ok(response);
    }

在response.data.message中,服务器上的文件路径(192.xxx.x.xxx \ folder \ filename)即将到来,它将通过window.open()打开该文件。但是在URL中,文件夹的整个路径是可见的,这将成为安全漏洞。因此,我想在同一控制器中“在新视图中显示文件”,该控制器将在新选项卡中打开文件。网址应该是(192.xxx.x.xxx \ Profile \ Details?docid = xxxxxxxxxxxxxxxxx)。

angularjs asp.net-mvc asp.net-web-api
1个回答
1
投票

您正在寻找的内容,您可以在Google上快速搜索:“从ASP.NET Web API方法下载文件”。

例如herehere你会找到实现你正在寻找的东西的例子。

编辑:

HttpResponseMessage response = new HttpResponseMessage();
response.StatusCode = HttpStatusCode.OK;
response.Content = new StreamContent(result);
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue(System.Net.Mime.DispositionTypeNames.Inline)
{
    FileName = "foo.pdf"
};
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");

源自thisthis线程。

您需要根据实际文件类型更改Content-Type。此外,如果文件在浏览器中实际可见,则取决于浏览器是否能够这样做。

© www.soinside.com 2019 - 2024. All rights reserved.