SqlCommand cmd = new SqlCommand (
"SELECT FileContents FROM AspContent " +
"WHERE FileName=@fn", conn);
cmd.Parameters.Add("@fn", fileName);
contents = cmd.ExecuteScalar() as string;
if (contents == null)
contents = string.Empty;
}
catch
{
contents = string.Empty;
}
finally
{
conn.Close();
}
return contents;
}
Функция GetFileFromDB всего лишь получает имя файла из виртуального пути, а затем читает содержимое файла из базы данных. (Помните, что имя файла является первичным ключом в определенной базе данных, как показано на рис. 18.27.) Этот метод затем используется методами FileExists и GetFile, как показано в следующем фрагменте кода:
public override bool FileExists(string virtualPath)
{
string contents = this.GetFileFromDB(virtualPath);
if (contents.Equals(string.Empty))
return false;
else
return true;
}
public override System.Web.Hosting.VirtualFile GetFile(string virtualPath)
{
string contents = this.GetFileFromDB(virtualPath);
if (contents.Equals(string.Empty))
return Previous.GetFile(virtualPath);
else
return new MyVirtualFile(virtualPath, contents);
}
}
Как только вы вставите эту функцию в свой код, приложение будет готово к работе. Естественно, класс VirtualPathProvider работает для ресурсов, подключенных только с помощью ISAPI-расширения ASP.NET. Следовательно, если вы хотите использовать свои собственные расширения файлов в своем приложении, то сначала должны подключить это расширение с помощью ISAPI-расширения фильтра aspnet_isapi.dll. На рис. 18.28 показано приложение в действии. На рисунке показаны три броузера, один из которых пытается получить доступ к физическому файлу, другой — к файлу из базы данных, а третий — к ресурсу, доступ к которому закрыт и в базе данных, и в файловой системе.
предыдущая следующая страница вначало главы оглавление
791