【问题标题】:AjaxFileUpload Iterate uploaded files afer files are uploadedAjaxFileUpload 在上传文件后迭代上传的文件
【发布时间】:2013-12-20 10:29:18
【问题描述】:

我在 Ajaxcontrol Toolkit 中使用 AjaxFileUpload 控件。

示例代码如下。

<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
}

有什么方法可以达到上述要求吗?

【问题讨论】:

  • 有没有解决办法?
  • 还没有。没有收到任何可以尝试的解决方案。
  • 我有一个解决方案。
  • 感谢您的回复。你能提供解决方案吗?
  • 看到我已经发布了答案。

标签: asp.net ajaxcontroltoolkit asyncfileupload


【解决方案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);
                }
            }
        }
 }

【讨论】:

  • 感谢您的回复,但您没有提到如何在 Session 中保存文件内容。还建议在会话中保存内容流吗?文件的大小可以以 MB 为单位,甚至 > 10 MB。有没有办法可以从 btnCheckFiles_Click 事件中的 AjaxFileUpload1 控件中获取它?
  • 是的,建议将文件内容存储在会话中,因为您在保存后很长时间没有对其进行排序,因为您在按钮单击事件中破坏了该会话。 :)
  • 你实现了这个答案吗?
  • 不,我还没有实施解决方案。建议很好,但我不再实施此上传器。我选择了另一个文件上传器。再次感谢
  • 谢谢,这个解决方案对我有用,但我在 js 代码中使用了 file.get_fileName() ,将文件名存储在隐藏字段中,以便稍后在特定按钮单击时保存它们。跨度>
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-04
  • 1970-01-01
  • 2014-03-23
  • 2014-10-20
  • 1970-01-01
相关资源
最近更新 更多