在内网应用程序中从远程驱动器读取文件

Posted

技术标签:

【中文标题】在内网应用程序中从远程驱动器读取文件【英文标题】:Read Files from Remote Drive in Intranet App 【发布时间】:2016-08-13 18:37:20 【问题描述】:

我想从网络共享文件夹中读取与某些参数匹配的 pdf 文件名,并提供一个链接以在我的模型的详细信息页面上查看它们。我需要得到的只是文件名。我现在不需要任何文件管理/读/写。

如果我有路径,我可以在浏览器中显示 .pdf(IE 将打开“file://”链接)。我缺少的部分是在运行时从远程(但相同的域)目录获取文件名。

我们已经设置了一个虚拟目录供应用使用,如果解析的物理文件夹在同一台服务器上,过去它运行良好,但这里不是这种情况。

我尝试过模拟,但这似乎不起作用,因为我仍然收到拒绝访问错误。

我意识到这可能是一个安全问题,这就是为什么不允许这样做,但是是否需要设置 IIS 配置或其他途径才能允许这样做?我似乎无法找到仅使用打开目录进行阅读的代码的方法。

我通常如何从虚拟目录中的一个文件中读取一些信息的示例代码:

// This example code is inside a controller action, so Server refers to HttpContextBase
var path = Server.MapPath("~/MyVirtualDirectory/" + fileName);
var fileExists = System.IO.File.Exists(path);
var fileLastModified = System.IO.File.LastWriteTime(path);

为了枚举目录中的匹配文件,我使用了DirectoryInfo

var pdfFileNames = new List<string>();
var dir = new DirectoryInfo(Server.MapPath("~/VirtualDirectory/"));
var pdfs = dir.EnumerateFiles("*.pdf");
foreach (var pdf in pdfs) 

    pdfFileNames.Add(pdf.Name);

正如我所提到的,当物理文件夹位于同一台服务器上时,这些方法可以正常工作,但一旦目录位于远程驱动器上,它就不再有效。我有权打开所需的目录,我的同事说他授予了虚拟目录和服务器的适当权限。目前不知道还有什么可以尝试的。

编辑:现在它正在工作,我使用虚拟目录显示文件

http://server/appName/virtualDirectory/pdfFileName

【问题讨论】:

【参考方案1】:

默认情况下,IIS 应用程序池在名为 IIS APPPOOL\[NameOfYourAppPool] 的特定本地 Windows 身份下运行。这是本地用户,无法授予此身份访问位于不同计算机上的资源的权限。

如果两台服务器在同一个域内,可以尝试以下解决方案:

在域用户下运行 IIS 应用程序并向该域用户授予所需的权限。 以 NetworkService 身份运行 IIS 应用程序,并向 IIS 服务器的 DOMAIN\MACHINENAME$ 帐户授予权限。

【讨论】:

我们基于第一个建议来达成解决方案。然后将用户设置为服务。现在,我可以根据需要从远程虚拟目录中读取。感谢您的提示! 这通常是最佳选择,因为您的权限不依赖于您的网站部署所在的机器。

以上是关于在内网应用程序中从远程驱动器读取文件的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 13 中从外部存储读取文件

读取驱动程序使用 spark-submit 发送的文件

如何在 App Engine 中从 Google Storage 读取 zip 文件?

在c ++中从文件中读取整行

如何在streamlit中从用户读取csv文件并转换为pandas数据框

如何在单个项目中从 C# 中的多个配置文件中读取值?