Получение размера удаленной папки через классический ASP - PullRequest
1 голос
/ 05 января 2010

Я пытаюсь что-то довольно простое, но у меня от этого болит голова. Я почти уверен, что все, что у меня есть, это проблема с разрешениями, которую я не знаю, как решить, но могу ошибаться.

Вот мой сценарий ... У меня 3 сервера ...

  1. Сервер A - веб-сервер (Windows 2003) - анонимный доступ включен
  2. Сервер B - Red 5 Media Server
  3. Сервер C - NAS

Веб-сайт на сервере A позволяет записывать / выгружать видео на сервер B, где видео обрабатывается / транскодируется. Задание Cron на сервере B затем перемещает видео на сервер C. для хранения.

Пользователи могут затем просматривать свои видео с Сервера A через виртуальный каталог, настроенный в IIS, который указывает на Сервер C и подключается как учетная запись пользователя домена.

Мне нужно, как использовать объект файловой системы ASP, чтобы получить размер папки на сервере C, содержащей видео.

Я сопоставил родительскую папку папки на сервере C, в которой видео хранятся, с буквой диска на сервере A, используя путь UNC (\ servername \ videos).

Я попытался использовать метод folderExists () FileSystemObject для целей отладки, и он возвращает false, если я передаю подключенный буквенный диск или путь UNC. Это дает путь не найдена ошибка. Просто чтобы быть уверенным, что я сделал response.write пути, передаваемого в метод folderExists (), и это правильный путь. Все это заставляет меня поверить, что это действительно проблема с разрешениями, которую я просто не знаю, как ее решить.

Спасибо, Райан

Ответы [ 3 ]

2 голосов
/ 05 января 2010

Подключенные сетевые диски вам не нужны в ASP на IIS6, поскольку они являются частью профиля пользователя. Профили пользователей не полностью загружены в таких службах, как IIS6.

При условии, что в чистой среде ASP (вы не можете установить другие библиотеки DLL и т. Д.), Вам понадобится анонимный пользователь для доступа к общему сетевому ресурсу, где хранятся видео, и использования пути UNC.

Теперь обычно учетная запись IUSR является локальной гостевой учетной записью, которая не имеет доступа к сети. Вам нужно будет создать пользователя в домене, к которому принадлежит NAS, и указать учетные данные пользователей в качестве учетной записи анонимного пользователя для тех страниц, которые должны выполнить задачу «Получить размер» (вам не нужно менять анонимного пользователя в целом приложение).

Вышеизложенное предполагает, что Сервер A является членом того же домена, что и Сервер C. Если нет, то вам необходимо создать пользователя в домене, к которому принадлежит Сервер A, который отражает пользователя на Сервере C, включая его пароль (или переход через доверительные отношения).

С этим на месте вы можете пойти дальше и использовать FileSystemObject.

1 голос
/ 05 января 2010

Вам нужно работать с коллекцией 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

%>

Поиграйте с этим и посмотрите, не возникли ли у вас проблемы, если это так, мы будем копать немного глубже:)

0 голосов
/ 05 января 2010

Не уверен, что это правильно, но чтобы исправить это, мне пришлось сопоставить сетевой диск через учетную запись ASP (как IUSR_machine), например так ...

dim objNetwork

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

objNetwork.RemoveNetworkDrive "X:"
set objNetwork = nothing

Затем я смог получить доступ к сопоставленной букве диска (в данном случае X) через FileSystemObject.

...