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

时间:2010-01-05 18:32:51

标签: permissions asp-classic filesystemobject

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

这是我的情景...... 我有3台服务器......

  1. 服务器A - Web服务器(Windows 2003) - 启用匿名访问
  2. 服务器B - Red 5媒体服务器
  3. 服务器C - NAS
  4. 服务器A上的网站允许将视频录制/上传到服务器B,在那里处理/转码视频。 然后,服务器B上的Cron作业将视频移动到服务器C进行存储。

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

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

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

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

    谢谢, 莱恩

3 个答案:

答案 0 :(得分:2)

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

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

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

前面假设服务器A是与服务器C相同的域的成员。如果没有,那么您需要在服务器A所属的域上创建用户,以反映服务器C上的用户,包括其密码(或跳转)通过信任关系箍。)

有了这些,您可以继续使用FileSystemObject

答案 1 :(得分:1)

您需要使用FSO.Drives集合才能进入NAS。看看这篇文章(只是谷歌搜索它,但似乎没问题):

http://www.stardeveloper.com/articles/display.html?article=2001050301&page=1

尝试运行此操作并查看您的驱动器是否可用,如果存在权限问题,请帮助缩小范围

<%

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

%>

玩一下,看看你是否还有问题,如果有的话,我们会深入挖掘一下:)

答案 2 :(得分:0)

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

dim objNetwork

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

objNetwork.RemoveNetworkDrive "X:"
set objNetwork = nothing

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