Member 13990122 Ответов: 2

Обработчик изображений не перезагружает мой образ! Или мой дефуалт-образ .


привет
я использую обработчики для загрузки редактирования удаления изображений это работает просто отлично ! но когда я удаляю и устанавливаю дефуалт-изображение, оно не появляется до тех пор, пока я не обновлю страницу !

Что я уже пробовал:

public class Handler1 : IHttpHandler, IRequiresSessionState
    {
        public static string strCon = System.Configuration.ConfigurationManager.AppSettings["connectionstring"];
        public void ProcessRequest(HttpContext context)
        {
            SqlConnection _con = new SqlConnection(strCon);
            var id = context.Request.Params.GetValues("id");
            int ImgNumber = Convert.ToInt32(id[0].ToString());
            int wasteCheckID = Convert.ToInt32(context.Session["WasteCheckID"]);
            string stDelete = "DELETE FROM tbl_LogisticsWasteCheckImg WHERE WasteCheckID=" + wasteCheckID + " AND ImgNumber=" + ImgNumber;
            SqlCommand cmdDelete = new SqlCommand(stDelete, _con);
            _con.Open();
            cmdDelete.ExecuteNonQuery();
            _con.Close();
            string strget = "select img from tbl_logisticswastecheckimg where wastecheckid=114  and imgnumber=1";
            _con.Open();
            using (SqlDataAdapter sda = new SqlDataAdapter(strget, _con))
            {
                DataTable dt = new DataTable();
                sda.Fill(dt);
                if (dt.Rows.Count > 0)
                {
                    byte[] bytes = (byte[])dt.Rows[0]["img"];
                    context.Response.BinaryWrite(bytes);

                    context.Response.End();
                }
                else
                {
                    context.Response.WriteFile("~/images/a.png");
                    //read image file into image object.
                    Image img = Image.FromFile(context.Server.MapPath("~/images/a.png"));

                    //imageconverter class convert image object to byte array.
                    byte[] bytes = (byte[])(new ImageConverter()).ConvertTo(img, typeof(byte[]));
                    context.Response.BinaryWrite(bytes);
                    context.Response.End();
                }
            }
        }
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

Richard Deeming

"DELETE FROM tbl_LogisticsWasteCheckImg WHERE WasteCheckID=" + wasteCheckID + " AND ImgNumber=" + ImgNumber

Не делай этого так!

В данный конкретный случай, поскольку оба параметра являются целыми числами, вы должны быть в порядке. Но использование конкатенации строк для построения SQL - запроса может привести и приведет к уязвимостям SQL-инъекций. Вместо этого всегда используйте параметризованный запрос.
const string stDelete = "DELETE FROM tbl_LogisticsWasteCheckImg WHERE WasteCheckID = @WasteCheckID AND ImgNumber = @ImgNumber";
using (SqlCommand cmdDelete = new SqlCommand(strDelete, _con))
{
    cmdDelete.Parameters.AddWithValue("@WasteCheckID", wasteCheckID);
    cmdDelete.Parameters.AddWithValue("@ImgNumber", ImgNumber);
    
    _con.Open();
    cmdDelete.ExecuteNonQuery();
    _con.Close();
}

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]

Member 13990122

привет
Спасибо , да, я немного знаю об этом :) но спасибо агиан ,

2 Ответов

Рейтинг:
2

Member 13990122

<pre><img id="Img1" runat="server" src='~/Get.ashx?imgID=1' class="img" />


Рейтинг:
0

Vincent Maverick Durano

Это, вероятно, потому, что браузер кэширует изображение. Если вы хотите убедиться, что браузер обновляет изображение, вы можете сделать следующее:

(1) добавить соответствующие заголовки.

HttpResponse Response = HttpContext.Current.Response;
Response.Expires = 0;
Response.Cache.SetCacheability(HttpCacheability.NoCache);

(2) Добавьте уникальную строку запроса к URL-адресу, чтобы принудительно обновить его.
Image1.ImageUrl = "~/images/a.png"+"?" + DateTime.Now.Ticks;


Member 13990122

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

Member 13990122

у меня есть код в комментарии после этого.

Vincent Maverick Durano

Вы все еще можете использовать статический идентификатор. Идея состоит в том, чтобы добавить DateTime.Now.Ticks к URL-адресу, чтобы он принудительно обновил браузер.