AsyncFileUpload двойная загрузка

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

Код разметки:

<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.";
            }
        }
    }

2 ответа

Решение

Я думаю, что просто удаление строки ниже сделало бы это нормально

OnUploadedComplete="btnUpload_Click"

просто дайте мне знать, если это сработало...

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

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

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

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

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

Другие вопросы по тегам