2014-10-06 3 views
1

Я видел некоторые другие вопросы, похожие на мои, но я не совсем понял, как использовать это, чтобы исправить свой код. У меня есть веб-форма с выпадающим списком, который используется для выбора нужного изображения. Моя проблема в том, что сейчас я использую несколько обработчиков изображений для каждого изображения. вот примеры кода:Как получить несколько изображений из одного обработчика изображений?

веб-форму:

namespace MultiCameraPage 
{ 
public partial class Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 


    protected void SelBut_Click(object sender, EventArgs e) 
    { 
     int num = DropDownList1.SelectedIndex; 


     switch (num) 
     { 
      case 0: 
       Response.Redirect("Page1.htm"); 
       break; 
      case 1: 
       Response.Redirect("Page2.htm"); 
       break; 
      case 2: 
       Response.Redirect("Page3.htm"); 
       break; 
      case 3: 
       Response.Redirect("Page4.htm"); 
       break; 

     } 

    } 

} 
} 

он просто перенаправляет на веб-страницу, которая имеет изображение, которое вы хотите. Я покажу «page1» и «page2», а остальное - просто слово с измененными именами.

стр.1 HTML:

<head> 
<title></title> 
<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> 
<script type="text/javascript" language="JavaScript"> 
    function refreshIt() { 
     if (!document.images) return; 
     document.getElementById("imgcontainer1").src = "/Page1Handler.ashx?" + Math.random(); 
     setTimeout('refreshIt()', 700); 
    } 
</script> 
</head> 
<body onload=" setTimeout('refreshIt()',700)"> 
<img id="imgcontainer1" src="/Page1Handler.ashx" alt="cam image1"/> 
</body> 
</html> 

Page1Handler:

Этот обработчик должен сохранить изображение из FileStream

namespace MultiCameraPage 
{ 

public class Page1Handler : IHttpHandler 
{ 

    public void ProcessRequest(HttpContext context) 
    { 
     string saveTo = @"C:pathtoImage\images\XIG.jpg"; 
     FileStream writeStream1 = new FileStream(saveTo, FileMode.OpenOrCreate, FileAccess.ReadWrite); 

     using (FileStream fs1 = File.Open(@"C:\Path to filestream", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)) 
     { 
      ReadWriteStream1(fs1, writeStream1); 
     } 
     byte[] tt = File.ReadAllBytes(context.Server.MapPath("~/images/XIG.jpg")); 
     context.Response.ContentType = "image/jpeg"; 
     context.Response.BinaryWrite(tt); 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 

    // readStream is the stream you need to read 
    // writeStream is the stream you want to write to 
    private void ReadWriteStream1(Stream readStream, Stream writeStream) 
    { 
     int Length = 256; 
     Byte[] buffer = new Byte[Length]; 
     int bytesRead = readStream.Read(buffer, 0, Length); 
     // write the required bytes 
     while (bytesRead > 0) 
     { 
      writeStream.Write(buffer, 0, bytesRead); 
      bytesRead = readStream.Read(buffer, 0, Length); 
     } 
     readStream.Close(); 
     writeStream.Close(); 
    } 
} 
} 

PAGE2 HTML:

это то же самое, как page1 просто с измененными именами

<head> 
<title></title> 
<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> 
<script type="text/javascript" language="JavaScript"> 
    function refreshIt() { 
     if (!document.images) return; 
     document.getElementById("imgcontainer2").src = "/Page2.ashx?" + Math.random(); 
     setTimeout('refreshIt()', 700); 
    } 
</script> 
</head> 
<body onload=" setTimeout('refreshIt()',700)"> 
<img id="imgcontainer2" src="/Page2.ashx" alt="cam image2"/> 
</body> 

Page2.ashx:

же, как page1Handler.ashx

namespace MultiCameraPage 
{ 

public class Page2 : IHttpHandler 
{ 

    public void ProcessRequest(HttpContext context) 
    { 
     string saveTo = @"C:\PathToImage\images\GateV.jpg"; 
     FileStream writeStream3 = new FileStream(saveTo, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite); 

     using (FileStream fs3 = File.Open(@"C:\path to filestream", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)) 
     { 
      ReadWriteStream3(fs3, writeStream3); 
     } 
     byte[] tt = File.ReadAllBytes(context.Server.MapPath("~/images/GateV.jpg")); 
     context.Response.ContentType = "image/jpeg"; 
     context.Response.BinaryWrite(tt); 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 

    // readStream is the stream you need to read 
    // writeStream is the stream you want to write to 
    private void ReadWriteStream3(Stream readStream, Stream writeStream) 
    { 
     int Length = 256; 
     Byte[] buffer = new Byte[Length]; 
     int bytesRead = readStream.Read(buffer, 0, Length); 
     // write the required bytes 
     while (bytesRead > 0) 
     { 
      writeStream.Write(buffer, 0, bytesRead); 
      bytesRead = readStream.Read(buffer, 0, Length); 
     } 
     readStream.Close(); 
     writeStream.Close(); 
    } 
} 
} 

Остальное повторяется только эти файлы. Я чувствую, что это самый худший способ сделать это, и именно поэтому я прошу о помощи. Выпадающее меню прикрепляется к файлу данных, который имеет только имя изображения и ничего больше. Должен ли я добавить что-то еще в datatable?

ответ

1

Вы определенно должны иметь возможность использовать один обработчик и передавать имя изображения в качестве параметра к нему. Таким образом, вы теги изображений будет выглядеть следующим образом:

<img id="imgcontainer2" src="/ImageHandler.ashx?imageName=GateV.jpg" alt="cam image2"/> 

И сам обработчик просто решает, что изображение, чтобы загрузить чтение этого параметра:

public void ProcessRequest(HttpContext context) 
{ 
    string imageName = context.Request["imageName"]; //make sure to handle case when this param is missing 

    string saveTo = string.Format(@"C:pathtoImage\images\{0}", imageName); 
    ... 
+0

какую библиотеку я включить использовать «запрос»? Я не могу найти, какой из них. – user3634308

+0

@ user3634308, извинения, это свойство HttpContext. Сообщение обновлено – Andrei

Смежные вопросы