AjaxFileUpload Итерировать загруженные файлы после загрузки файлов

Я использую элемент управления AjaxFileUpload в наборе инструментов Ajaxcontrol.

Пример кода приведен ниже.

<ajaxToolkit:AjaxFileUpload ID="AjaxFileUpload1" ThrobberID="myThrobber" 
AllowedFileTypes="doc,jpg,jpeg,mp3" MaximumNumberOfFiles="10" runat="server"
OnUploadComplete="AjaxFileUpload1_UploadComplete" 
Width="450px" />

<asp:Button ID="btnCheckFiles" Text="CheckFiles" runat="server"/>

Я могу сохранить файлы в событии AjaxFileUpload1_UploadComplete

protected void AjaxFileUpload1_UploadComplete(object sender, AjaxControlToolkit.AjaxFileUploadEventArgs e)
{
   AjaxFileUpload1.SaveAs(filepath);
}

Выше работает нормально, но вместо сохранения файлов в событии UploadComplete я хочу сохранить их в событии Button Click другой кнопки после загрузки файлов, здесь, скажем, в событии click для btnCheckFiles, что-то вроде ниже

protected void btnCheckFiles_Click(object sender, EventArgs e)
{
  // Iterate all files here uploaded 
  // for each file in ajaxfileupload control
  //iterate and save each file to a path
}

Есть ли способ выполнить вышеуказанное требование?


person Mania    schedule 20.12.2013    source источник
comment
Вы там У вас есть решение?   -  person Bhavesh Kachhadiya    schedule 20.12.2013
comment
Нет, не сейчас. Не получено никаких возможных решений для попытки.   -  person Mania    schedule 23.12.2013
comment
У меня есть одно решение для этого.   -  person Bhavesh Kachhadiya    schedule 23.12.2013
comment
Спасибо за ваш ответ. Не могли бы вы предоставить решение?   -  person Mania    schedule 23.12.2013
comment
Смотрите, я разместил ответ.   -  person Bhavesh Kachhadiya    schedule 23.12.2013


Ответы (1)


Внесите изменения на странице aspx следующим образом:

<asp:HiddenField id="hdnFileIDs" runat="server" Value="" />

<ajaxToolkit:AjaxFileUpload ID="AjaxFileUpload1" ThrobberID="myThrobber" 
AllowedFileTypes="doc,jpg,jpeg,mp3" MaximumNumberOfFiles="10" runat="server"
OnUploadComplete="AjaxFileUpload1_UploadComplete" 
OnClientUploadComplete="onClientUploadComplete"
Width="450px" />

Добавьте блок javascript следующим образом:

 <script type="text/javascript">    
function onClientUploadComplete(sender, e) {
                var id = e.get_fileId();
                var objHdnFileIDs = document.getElementById('<%=hdnFileIDs.ClientID%>');
                objHdnFileIDs.value = objHdnFileIDs.value + id + ',';
               }
</script>

На вашей странице .cs

  protected void AjaxFileUpload1_UploadComplete(object sender, AjaxControlToolkit.AjaxFileUploadEventArgs file)
    {
         Session["fileContents_" + file.FileId] = file.GetContents();
         Session["fileExtension_" + file.FileId] = file.FileName.Substring(file.FileName.LastIndexOf('.'));
       //AjaxFileUpload1.SaveAs(filepath);
    }

protected void btnCheckFiles_Click(object sender, EventArgs e)
{
  // Iterate all files here uploaded 
   if (!string.IsNullOrEmpty(hdnFileIDs.Value))
        {
            string strFileIDs = hdnFileIDs.Value;
            string[] arrFileIDs = strFileIDs.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
            if (arrFileIDs != null && arrFileIDs.Length > 0)
            {
                foreach (string strFileID in arrFileIDs)
                {
                    var fileContents = (byte[])Session["fileContents_" + strFileID];
                    var fileExtension = (string)Session["fileExtension_" + strFileID];

                    File.WriteAllBytes(filepath + strFileID + fileExtension, fileContents);
                    Session.Remove("fileContents_" + strFileID);
                    Session.Remove("fileExtension_" + strFileID);
                }
            }
        }
 }
person Bhavesh Kachhadiya    schedule 23.12.2013
comment
Спасибо за ответ, но вы не упомянули, как сохранить содержимое файла в сеансе. Также будет целесообразно сохранить поток содержимого в сеансе? Файл может иметь размер в МБ даже > 10 МБ. Нет ли способа получить его из элемента управления AjaxFileUpload1 в событии btnCheckFiles_Click? - person Mania; 26.12.2013
comment
Да, рекомендуется хранить содержимое файла в сеансе, так как вы не сортируете его в течение длительного времени после сохранения, вы уничтожаете этот сеанс в событии нажатия кнопки. :) - person Bhavesh Kachhadiya; 26.12.2013
comment
вы реализовали этот ответ? - person Bhavesh Kachhadiya; 31.12.2013
comment
Нет, я не реализовал решение. Предложение в порядке, но я больше не использую этот загрузчик. Я выбрал другой загрузчик файлов. Еще раз спасибо - person Mania; 01.01.2014
comment
Спасибо, это решение сработало для меня, но я использовал file.get_fileName() в коде js, чтобы хранить имена файлов в скрытом поле, чтобы я мог сохранить их позже при нажатии определенной кнопки. - person Eugene Pavlov; 09.04.2014