【发布时间】:2018-08-09 06:39:09
【问题描述】:
我通过单击按钮(按钮位于 192.xxx.x.xxx\Profile\Details 页面中)将 ID 传递给它正在调用 API 的 angularJS 控制器文件
$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 中,文件夹的整个路径是可见的,这将成为安全漏洞。因此,我想在同一控制器中“在新视图中显示文件”,这将在新选项卡中打开文件。 url 应该类似于 (192.xxx.x.xxx\Profile\Details?docid=xxxxxxxxxxxxxxxxxx )。
【问题讨论】:
-
c#标签有什么意义?? -
如果您不想直接访问该文件,请不要将其放在有 URL 的位置。即使你不直接把它送出去,它也可以被任何扫描网站的人索引,所以它已经没有安全性了。所以将它移动到离线位置,为每个文件创建一个带有ID的数据库条目,并在您的视图中使用文件ID作为参数,并在后台代码中查找数据库中的ID,找到相关文件磁盘,提取其内容并将其作为附件发送以供下载(您可以谷歌搜索示例)。
-
@ADyson 抱歉,我无法正确了解您保存 id 的含义,提取内容。
-
@ADyson 问题是我不应该下载文件,它应该只是在浏览器的新选项卡中弹出,但文件路径不作为 URL。
-
"问题是我不应该下载文件,它应该只是在浏览器的新标签中弹出"...是的,您可以打开一个新标签,但文件是否嵌入浏览器窗口或下载取决于用户的浏览器是否具有直接显示的能力。例如也许 HTML 或 JPG 或者有时 PDF 可能会显示在浏览器窗口中(由于本机支持或 Adobe 等插件),其他文件类型无论如何都会被下载。那部分不是你完全可以控制的
标签: angularjs asp.net-mvc asp.net-web-api