2013-07-31 3 views
1

Я использую asp.net C# FIleUpload. Я столкнулся с проблемой, то есть когда я загружаю изображение и он сохраняется в указанной папке, при обновлении страницы изображение снова загружается столько раз, сколько обновляется страница. Я попытался включить и отключить параметр ViewState, но та же проблема сохраняется. Я закодировал свою функциональность так, как только изображение загрузится, оно сразу получит уникальное имя, поэтому картинки не будут перезаписаны. Кто-нибудь может объяснить, как управлять этим поведением, чтобы изображения загружались только по указанной кнопке загрузки, а не по обновлению страницы. Ниже основной код я использую:FileUpload загружает нежелательные файлы на страницу обновления

protected void btnUpload_Click(object sender, EventArgs e) 
{ 

if ((Session["Img1"] != null) && (Session["Img2"] != null) && (Session["Img3"] != null) && (Session["Img4"] != null)) 
    { 
     lblUploadMsg.Text = "You cannot upload more than 4 pictures"; 
     return; 
    } 
    if (FileUpload1.HasFile) 
    { 
     string fileExtension = System.IO.Path.GetExtension(FileUpload1.FileName); 
     if (fileExtension.ToLower() == ".jpg") 
     { 
      int fileSize = FileUpload1.PostedFile.ContentLength; 

      if (FileUpload1.PostedFile.ContentLength < 2097152) 
      { 

       //FileUpload1.SaveAs(Server.MapPath("~/Temp/" + FileUpload1.FileName)); 
       //Response.Write("Successfully Done"); 

       string sp = Server.MapPath("~/ItemPictures/"); 
       String fn = Guid.NewGuid().ToString() + FileUpload1.FileName.Substring(FileUpload1.FileName.LastIndexOf(".")); 
       if (sp.EndsWith("\\") == false) 
        sp += "\\"; 
       sp += fn; 
       FileUpload1.PostedFile.SaveAs(sp); 
       lblUploadMsg.ForeColor = System.Drawing.Color.Green; 
       lblUploadMsg.Text = "Picture Uploaded succefully. You can upload upto 4 pictures"; 
       Aziz.InnerHtml += "Image saved\n"; 

       if (Session["Img1"] == null) 
       { 
        Session["Img1"] = "~/ItemPictures/" + fn; 
       } 
       else if (Session["Img2"] == null) 
       { 
        Session["Img2"] = "~/ItemPictures/" + fn; 
       } 
       else if (Session["Img3"] == null) 
       { 
        Session["Img3"] = "~/ItemPictures/" + fn; 
       } 
       else if (Session["Img4"] == null) 
       { 
        Session["Img4"] = "~/ItemPictures/" + fn; 
       } 
      } 
      else 
      { 
       lblUploadMsg.Text = "Maximum 2MB files are allowed"; 
      } 
     } 
     else 
     { 
      lblUploadMsg.Text = "Only JPG files are allowed"; 
     } 
    } 
    else 
    { 
     lblUploadMsg.Text = "No File was Selected"; 
    } 
    ShowAvailblImgs(); 
    } 

    private void ShowAvailblImgs() 
    { 
    if (Session["Img1"] != null) 
    { 
     Image1.ImageUrl = (string)Session["img1"]; 
     Image1.Width = 130; 
     Image1.Height = 130; 
     Image1.Visible = true; 
    } 
    else 
     Image1.Visible = false; 
    if (Session["Img2"] != null) 
    { 
     Image2.ImageUrl = (string)Session["img2"]; 
     Image2.Width = 130; 
     Image2.Height = 130; 
     Image2.Visible = true; 
    } 
    else 
     Image2.Visible = false; 
    if (Session["Img3"] != null) 
    { 
     Image3.ImageUrl = (string)Session["img3"]; 
     Image3.Width = 130; 
     Image3.Height = 130; 
     Image3.Visible = true; 
    } 
    else 
     Image3.Visible = false; 
    if (Session["Img4"] != null) 
    { 
     Image4.ImageUrl = (string)Session["img4"]; 
     Image4.Width = 130; 
     Image4.Height = 130; 
     Image4.Visible = true; 
    } 
    else 
     Image4.Visible = false; 
} 
+0

Вы можете сохранить кеш контрольных сумм MD5 загруженных файлов. Для новых загрузок проверьте MD5 загруженного файла. Вы также можете добавить токен в скрытое поле на страницу. Если поданный токен не найден в кеше, вы можете сохранить изображение. Если он был найден, пользователь уже отправил файл. При успешной загрузке пользователю потребуется новый токен. – Amy

+0

Спасибо за рекомендацию. Я все еще ищу другое предложение, если кто-то знает. – user2599269

+0

У вас возникла бы такая же проблема, если бы вы использовали '' –

ответ

1

Вы можете отслеживать, если запрос из-за обновления страницы. Пожалуйста, ознакомьтесь с приведенной ниже ссылкой на идеи о том, как это сделать: Page Refresh Causes Duplicate POST in ASP.NET Applications

+0

Да, я посетил эту страницу, но, к сожалению, не нашел сильного решения. – user2599269

+0

@ user2599269 Я не уверен, что вы уже нашли решение, но общая идея ссылки - обновить вашу страницу с помощью новой переменной сеанса для хранения значения и использовать это значение, чтобы проверить, обновляется ли страница или если она является подлинной обратной передачей. – Siva

4

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

Попробуйте это:

FileUpload1.Attributes.Clear(); 
2

использовать этот FileUpload1.Attributes.Clear();

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