HTTP-обработчик .ashx не может записать изображение из общего сетевого ресурса в ответ HTTP - PullRequest
0 голосов
/ 21 марта 2012

Я пытаюсь написать обработчик HTTP в C #, который загружает изображения с сетевого диска и записывает их в ответ HTTP. В настоящее время это не работает для меня, так как я продолжаю получать ответы HTTP 302, что приводит к отображению испорченного файла. Ниже мой обработчик HTTP. Права доступа были установлены, поэтому анонимные пользователи имеют доступ на чтение к общему ресурсу, но в идеале это не должно быть постоянным.

public class SecCamImage : IHttpHandler, IRequiresSessionState
{
    public void ProcessRequest(HttpContext context)
    {
        Configuration config = WebConfigurationManager.OpenWebConfiguration("~/Web.Config");        
        KeyValueConfigurationElement setting = null;  

        if(config.AppSettings.Settings.Count > 0)
        {
            setting = config.AppSettings.Settings["CameraBaseURL"];
        }

        if(setting != null)
        {
            string baseURL = setting.Value;
            string location = context.Request["location"].ToString();
            string camera = context.Request["camera"].ToString();
            string image = context.Request["image"].ToString();

            if (!(string.Compare(image, "no-image.jpg", true) == 0))
            {
                if (!string.IsNullOrEmpty(location) && !string.IsNullOrEmpty(camera) && !string.IsNullOrEmpty(image))
                {
                    string fullPath = string.Format(baseURL, location, camera, image);

                    System.IO.FileInfo imageFile = new System.IO.FileInfo(fullPath);

                    if (imageFile.Exists)
                    {
                        if (context.User.Identity.IsAuthenticated)
                        {
                            context.Response.ContentType = "image/jpeg";
                            context.Response.WriteFile(imageFile.FullName);
                            context.Response.End();
                        }
                    }
                }
            }
            else
            {
                context.Response.ContentType = "image/jpeg";
                context.Response.WriteFile(image);
                context.Response.End();
            }
        }   
    }    

    public bool IsReusable
    {
        get { return false; }
    }
}

URL-адрес, сохраненный в файле конфигурации, имеет следующую структуру: -

\\\\host\\directory\\{0}\\{1}\\{2}

{0} и {1} - это каталоги, а {2} - это файл.

1 Ответ

2 голосов
/ 23 апреля 2012

Мне удалось заставить это работать, добавив виртуальный каталог на наш веб-сайт на IIS.Обработчик .ashx теперь ссылается на Virutal Directory, а не на каталог на сетевом диске.

...