2013-12-20 2 views
1

Я использую AjaxFileUpload control в Ajaxcontrol Toolkit.AjaxFileUpload Iterate загруженные файлы файлы afer загружены

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

<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 события другой кнопки после того, как файлы закачано, здесь говорят, в случае щелчка 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 
} 

есть ли какой-нибудь способ для достижения вышеуказанного требования?

+0

Вы там у тебя есть решение? –

+0

Пока нет. Не получили никаких возможных решений. – Mania

+0

У меня есть одно решение для этого. –

ответ

2

сделать изменения в вашей странице 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" /> 

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

<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); 
       } 
      } 
     } 
} 
+0

Спасибо за ответ, но вы не упомянули, как сохранить содержимое файла в сеансе. Также будет желательно сохранить поток содержимого в сеансе? Файл может иметь размер в МБ даже> 10 МБ. Разве нет способа получить его из элемента управления AjaxFileUpload1 inlef в событии btnCheckFiles_Click? – Mania

+0

см. Я обновил ответ. –

+0

Да, желательно сохранить содержимое файла в сеансе, поскольку вы не сортируете его в течение длительного времени после сохранения, вы уничтожаете этот сеанс в событии нажатия кнопки. :) –

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