Permissions 通过经典ASP获取远程文件夹的大小

Permissions 通过经典ASP获取远程文件夹的大小,permissions,asp-classic,filesystemobject,Permissions,Asp Classic,Filesystemobject,我正在尝试一些非常简单的事情,但是我很头疼。我很确定我在这里遇到的只是一个权限问题,我不知道如何解决,但我可能错了 这是我的场景。。。 我有3台服务器 服务器A-Web服务器(Windows 2003)-启用匿名访问 服务器B-红色5媒体服务器 服务器C-NAS 服务器A上的网站允许将视频录制/上传到服务器B,并在服务器B中对视频进行处理/转码。 然后,服务器B上的Cron作业将视频移动到服务器C进行存储 然后,用户可以通过IIS中设置的虚拟目录从服务器A观看视频,该虚拟目录指向服务器C并作为域

我正在尝试一些非常简单的事情,但是我很头疼。我很确定我在这里遇到的只是一个权限问题,我不知道如何解决,但我可能错了

这是我的场景。。。 我有3台服务器

  • 服务器A-Web服务器(Windows 2003)-启用匿名访问
  • 服务器B-红色5媒体服务器
  • 服务器C-NAS
  • 服务器A上的网站允许将视频录制/上传到服务器B,并在服务器B中对视频进行处理/转码。 然后,服务器B上的Cron作业将视频移动到服务器C进行存储

    然后,用户可以通过IIS中设置的虚拟目录从服务器A观看视频,该虚拟目录指向服务器C并作为域用户帐户连接

    我需要了解一些如何使用ASP文件系统对象来获取服务器C上包含视频的文件夹的大小

    我已使用UNC路径(\servername\videos)将存储视频的服务器C上文件夹的父文件夹映射到服务器a上的驱动器号

    我尝试使用FileSystemObject的folderExists()方法进行调试,如果传入映射的字母驱动器或UNC路径,则返回false。它给出了一个路径未找到错误。为了确保我对传递到folderExists()方法的路径进行了response.write,并且它是正确的路径。所有这些让我相信这确实是一个权限问题,我只是不知道如何解决

    谢谢,
    Ryan

    您需要使用FSO.Drives集合才能访问NAS。看看这篇文章(只是在谷歌上搜索了一下,但似乎还可以):

    试着运行这个,看看你的驱动器是否可用,如果它是一个权限问题,应该有助于缩小范围

    <%
    
    Dim fso
    Set fso = Server.CreateObject("Scripting.FileSystemObject")
    
    Dim drives
    Set drives = fso.Drives
    
    Dim isReady
    
    For Each drive in drives
        isReady = drive.IsReady
    
        If isReady Then
            Response.Write "DriveLetter: " & drive.DriveLetter & "<br>"
            Response.Write "Path: " & drive.Path & "<br>"
            Response.Write "FileSytem: " & drive.FileSystem & "<br>"
            Response.Write "TotalSize: " & drive.TotalSize & "<br>"
            Response.Write "FreeSpace: " & drive.FreeSpace & "<br>"
        Else
            Response.Write "Driv Letter: " & drive.DriveLetter & "<br>"
            Response.Write drive.Path & "<br>"
            Response.Write "No other information available."
        End If
    Next
    
    %>
    
    
    

    玩一玩,看看你是否仍然有问题,如果是这样,我们将深入挖掘:)

    不确定这样做是否正确,但要解决这个问题,我必须通过ASP(作为IUSR_机器)帐户映射网络驱动器,就像这样

    dim objNetwork
    
    Set objNetwork = CreateObject("WScript.Network") 
    objNetwork.MapNetworkDrive "X:", "UNC path", "profile", "user", "password"
    
    objNetwork.RemoveNetworkDrive "X:"
    set objNetwork = nothing
    

    然后,我可以通过FileSystemObject访问映射的驱动器号(本例中为X)。

    映射的网络驱动器在IIS6上的ASP中对您没有用处,因为它们是用户配置文件的一部分。像IIS6这样的服务中没有完全加载用户配置文件

    假设是纯ASP环境(您不能安装其他DLL等),那么您将需要匿名用户访问存储视频的网络共享并使用UNC路径

    现在,IUSR帐户通常是无法访问网络的本地来宾帐户。您需要在NAS所属的域上创建一个用户,并将该用户凭据指定为需要执行“获取大小”任务的页面的匿名用户帐户(您不需要为整个应用程序更改匿名用户)

    前面假设服务器A与服务器C属于同一个域。如果不是,则需要在服务器A所属的域上创建用户,该用户也要镜像服务器C上的用户,包括其密码(或通过信任关系跳转)


    有了它,您就可以继续使用
    FileSystemObject

    谢谢Pete。运行这段代码后,打印出来的列表中只显示本地驱动器。我甚至没有从你的ELSE子句中得到要打印的信息。映射的驱动器似乎不在fso.drives调用返回的驱动器集合中。解释了为什么我得到了路径未找到的错误,我猜。嗯,好恼人的是,这就是所有的驱动器,你必须通过FSO玩。不知您是否可以授予IUSR访问父文件夹的权限,以及它是否可以与UNC一起工作?我担心UNC是不被允许的。值得一试?else子句仅在驱动器正忙/未准备就绪时才会触发(即您的软盘驱动器中没有磁盘,还记得吗?:)这是危险的,除了假设系统管理员不将驱动器X用于任何其他用途(我想这是可管理的)之外,如果服务器上的多个请求运行此代码会发生什么?映射尝试将失败,或者X将过早取消映射。绝对正确。我没想到你提到的问题。不过,你的回答确实起了作用。非常感谢你。