2010-01-05 87 views
1

我想要的東西很簡單,但我有頭痛。我很確定我在這裏所有的權限問題,我不知道如何解決,但我可能是錯的。通過傳統的ASP獲取遠程文件夾的大小

這是我的情景...... 我有3臺服務器......

  1. 服務器A - 的Web服務器(Windows 2003) - 啓用匿名訪問
  2. 服務器B - 紅5個媒體服務器
  3. 服務器C-NAS

服務器A上的網站允許將視頻記錄/上傳到處理/轉碼視頻的服務器B. 服務器B上的Cron作業然後將視頻移動到服務器C進行存儲。

用戶可以通過在IIS中設置的指向服務器C的虛擬目錄從服務器A觀看其視頻,並以域用戶帳戶連接。

我需要一些如何使用ASP文件系統對象來獲取包含視頻的服務器C上的文件夾的大小。

我已經使用UNC路徑(\ servername \ videos)將服務器C上存儲視頻的文件夾的父文件夾映射到服務器A上的驅動器號。

我試過使用FileSystemObject的folderExists()方法進行調試,如果我在映射的驅動器或UNC路徑中傳遞它,它將返回false。它給出了一個找不到路徑的錯誤。只是爲了確保我對傳入到folderExists()方法的路徑做了response.write,並且它是正確的路徑。所有這些讓我相信這是一個真正的權限問題,我只是不知道如何解決。

感謝, 瑞安

回答

2

因爲它們是用戶配置文件的一部分,所以映射網絡驅動器對IIS中的ASP無用。用戶配置文件未完全加載到IIS6等服務中。

假設一個純粹的ASP環境(你不能安裝其他DLL等),那麼你將需要匿名用戶訪問存儲視頻的網絡共享並使用UNC路徑。

現在通常IUSR帳戶是本地訪客帳戶,它無法訪問網絡。您需要在NAS所屬的域上創建用戶,並將用戶憑據指定爲需要執行「獲取大小」任務的頁面的匿名用戶帳戶(您不需要爲整個用戶更改匿名用戶應用)。

以上假設服務器A是與服務器C相同域的成員。如果不是,則需要在服務器A所屬的域上創建用戶,並且鏡像服務器C上的用戶,包括其密碼(或跳過信任關係箍)。您可以繼續使用FileSystemObject

+0

絕對正確。我沒有想到你提到的問題。雖然你的答案確實有效。非常感謝你。 – Ryan 2010-01-06 12:38:33

1

您需要用FSO.Drives收集工作到你的NAS。看看這篇文章(只是GOOGLE了它,但它似乎確定):

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 

%> 

有一個玩,看看你是否仍然有問題,如果是的話,我們會深入挖掘:)

+0

謝謝皮特。運行這段代碼後,只有本地驅動器顯示在列表中。我甚至沒有從你的ELSE子句中獲得信息來打印。看起來映射的驅動器甚至不在由fso.Drives調用返回的驅動器集合中。解釋爲什麼我得到的路徑找不到錯誤,我想。 – Ryan 2010-01-05 18:53:00

+0

嗯,很煩人的是,所有的驅動器,你必須通過FSO玩。不知道你是否可以讓IUSR訪問父文件夾,以及它是否可以與UNC協同工作?我擔心UNC是不允許的。值得一試? else子句只會在驅動器忙/未準備好時觸發,即您的軟盤驅動器中沒有磁盤,請記住這些? :) – 2010-01-05 19:38:28

0

不知道這是正確的做法,但要補救這一點,我必須映射網絡通過ASP(作爲IUSR_machine)帳戶l驅動ike so ...

dim objNetwork 

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

objNetwork.RemoveNetworkDrive "X:" 
set objNetwork = nothing 

然後,我可以通過FileSystemObject訪問映射的驅動器盤符(本例中爲X)。

+0

除了假設系統管理員不使用驅動器X作爲其他任何東西(我猜是可管理的)之外,這是危險的,如果服務器上的多個請求運行此代碼會發生什麼情況? Map嘗試失敗或者X會提前取消映射。 – AnthonyWJones 2010-01-05 20:50:46