2013-12-29 3 views
0

Я пытаюсь загрузить изображение, используя AsyncFileUpload и кнопку. Ниже приведен код, который я использую для этого. Но это вызывает двойную загрузку, не уверен, как позволить ей загружать изображение только после нажатия на btnUpload. Текущая проблема заключается в том, что как только я просматриваю изображение, которое я хочу в элементе управления asyncfileupload, будет загружаться.gif, показывая его загрузку, и я обновляю страницу, не нажимая на btnUpload, которое уже загружено в базу данных. То, что я хотел сделать, это позволить загрузке изображения ТОЛЬКО после нажатия на btnUpload. Помогите решить эту проблему. БЛАГОДАРЯ!AsyncFileUpload двойной загрузки

Код Markup:

<script type="text/javascript" language="javascript"> 
    function StartUpload(sender, args) { 
     var filename = args.get_fileName(); 
     var path = args.get_path(); 
     if (filename != "") { 
      // code to get File Extension.. 
      var arr1 = new Array; 
      arr1 = filename.split("\\"); 
      var len = arr1.length; 
      var img1 = arr1[len - 1]; 
      var filext = img1.substring(img1.lastIndexOf(".") + 1); 


      // Checking Extension 
      if (filext == "jpg" || filext == "JPG") { 
       $get("<%=lblUpload.ClientID %>").innerHTML = ""; 
       $get("<%=btnUpload.ClientID %>").disabled = false; 
       return true; 
      } 
      else { 
       $get("<%=lblUpload.ClientID %>").innerHTML = "Only .jpg and .JPG image allowed."; 
       $get("<%=btnUpload.ClientID %>").setAttribute('disabled', 'disabled'); 
       return false; 
      } 
     } 
    } 

<asp:AsyncFileUpload ID="AsyncFileUpload1" runat="server" 
CompleteBackColor="Lime" UploaderStyle="Modern" 
ErrorBackColor="Red" ThrobberID="Throbber" 
OnUploadedComplete="btnUpload_Click" 
UploadingBackColor="#66CCFF" 
OnClientUploadStarted="StartUpload" 
align="center"/> 

<br /> 
<br /> 

<asp:Label ID="Throbber" runat="server" Style="display: none"> 
<img src="image/indicator.gif" alt="loading" /> 
</asp:Label> 

<asp:Button ID="btnUpload" runat="server" OnClick="btnUpload_Click" Text="Upload" /> 

<br /> 
<br /> 

<asp:Label ID="lblUpload" runat="server" Text=""></asp:Label> 

btnUpload Код:

protected void btnUpload_Click(object sender, EventArgs e) 
    { 
     if (AsyncFileUpload1.HasFile == true) 
     { 
      String nric = (String)Session["nric"]; 

      string filePath = AsyncFileUpload1.PostedFile.FileName; 
      string filename = Path.GetFileName(filePath); 
      string ext = Path.GetExtension(filename); 

      string contenttype = String.Empty; 

      switch (ext) 
      { 
       case ".jpg": 
        contenttype = "image/jpg"; 
        break; 

       case ".JPG": 
        contenttype = "image/jpg"; 
        break; 
      } 
      if (contenttype != String.Empty) 
      { 
       System.Drawing.Image uploaded = System.Drawing.Image.FromStream(AsyncFileUpload1.PostedFile.InputStream); 

       System.Drawing.Image newImage = new Bitmap(1024, 768); 
       using (Graphics g = Graphics.FromImage(newImage)) 
       { 
        g.InterpolationMode = InterpolationMode.HighQualityBicubic; 
        g.DrawImage(uploaded, 0, 0, 1024, 768); 
       } 

       byte[] results; 
       using (MemoryStream ms = new MemoryStream()) 
       { 
        ImageCodecInfo codec = ImageCodecInfo.GetImageEncoders().FirstOrDefault(c => c.FormatID == ImageFormat.Jpeg.Guid); 
        EncoderParameters jpegParms = new EncoderParameters(1); 
        jpegParms.Param[0] = new EncoderParameter(Encoder.Quality, 95L); 
        newImage.Save(ms, codec, jpegParms); 
        results = ms.ToArray(); 

       } 

       //insert the file into database 
       string strQuery = "Update MemberAccount Set profilepicture = @Data Where nric = @Nric"; 
       SqlCommand cmd = new SqlCommand(strQuery); 

       cmd.Parameters.Add("@Nric", SqlDbType.VarChar).Value = nric; 

       cmd.Parameters.AddWithValue("@Data", results); 

       InsertUpdateData(cmd); 

       UpdatePanel2.Update();      

       lblUpload.ForeColor = System.Drawing.Color.Green; 
       lblUpload.Text = "Profile Picture Updated."; 
      } 
     } 
    } 

ответ

0

я думаю, просто удалив строку ниже сделает это нормально

OnUploadedComplete="btnUpload_Click" 

просто сообщите мне, если это сработало ...

+0

Почему вы даже хотите AsyncFileUpload, когда хотите, чтобы пользователь нажал кнопку? – aliCna

+0

, если вы хотите, чтобы это асинхронное выделение события button_click и загрузка полностью Я имею в виду, что щелчок на кнопке будет чем-то приемлемым для загрузки. не загружать – aliCna

+0

Извините, я не добавил в триггер в updatepanel, почему он не работает. – user3143539

0

Я не думаю, что вы используете управление AyncFileUpload так, как оно было предназначено. Элемент управления предназначен для загрузки файла ПОСЛЕ того, как вы автоматически выбираете файл. Более правильная терминология для вашей кнопки «Загрузить» будет «Сохранить», поскольку файл уже существует на сервере, который нужно просто сохранить.

По телефону OnUploadedComplete вы эффективно вызываете код для сохранения файла. От here:

UploadedComplete - сгорело на стороне сервера, когда файл успешно загружен

Как aliCna предложил вам следует удалить этот вызов, как это кажется излишним.

Если вы хотите, чтобы файл был загружен после нажатия кнопки «Загрузить», вам нужно будет изучить другие элементы управления, которые могут потребоваться для просмотра других элементов управления загрузкой (например, AjaxFileUpload или стандартного элемента управления загрузкой файлов в ASP.net [хотя я не слишком уверен, насколько хорошо это играет с Update Panels]).

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