Предоставление пути к изображению, хранящемуся на сервере, а не в файлах приложения - PullRequest
2 голосов
/ 17 июня 2010

Мне нужно отобразить изображения на моей странице ASP.NET MVC, которые будут храниться на сервере у меня есть класс apphelper, который я могу использовать, чтобы указать путь

как это

public static class AppHelper
{
     public static string ImageLowResPath(string imageName)
     {

      }
}

Как я могу получить путь к файлу, который хранится здесь на диске c: сервера?

На мой взгляд, я получу путь к файлу вот так

img src = '<% = AppHelper.ImagelowResPath ("10-1010.jpg")%>'

Спасибо

Ответы [ 3 ]

2 голосов
/ 17 июня 2010

вам нужно создать действие, которое возвращает FileStreamResult, если файл находится за пределами вашего wwwroot.

например.

    public FilestreamResult GetPicture(string Filename) { 
        Filename = @"C:\SomePath\" + Filename;
            return new FileStreamResult(new FileStream(Filename, FileMode.Open, FileAccess.Read, FileShare.Read), "image/jpeg"));
    }

теперь ваш html должен выглядеть следующим образом

<img src="/Controller/GetPicture?Filename=test.jpg" />

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

в соответствии с передовой практикой вы должны разделить свои компоненты на несколько доменов.Yahoo опубликовала превосходное руководство по передовым методам ускорения работы веб-сайтов http://developer.yahoo.com/performance/rules.html#split

0 голосов
/ 17 июня 2010

Э-э, я не знаю точно, о чем вы просите, но вы можете попытаться выдать себя за него и затем получить доступ к общему ресурсу сервера?

[DllImport("advapi32.dll",EntryPoint = "LogonUser", SetLastError = true)]
public static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword,
        int dwLogonType, int dwLogonProvider, ref IntPtr phToken);

IntPtr admin_token = IntPtr.Zero;
WindowsIdentity wid = WindowsIdentity.GetCurrent();
WindowsIdentity wid_admin;  
WindowsImpersonationContext wic;

LogonUser(user, servername, pass, 9, 0, ref admin_token)
wid_admin = new WindowsIdentity(admin_token);
wic = wid_admin.Impersonate();

После того, как вы выделили кого-то с соответствующими привилегиями, вы можете перейти на

\\ имя_сервера \ c $ \ (путь к изображению)

0 голосов
/ 17 июня 2010

Вам необходимо использовать Server.MapPath (...), который сопоставит виртуальный путь с его физическим местоположением на диске:

string path = "~/Images/10-1010.jpg";
string filePath = Server.MapPath(path);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...