如何异步上传大文件

时间:2013-11-22 19:35:00

标签: c# multithreading file-upload

用户可以向一组用户发送提醒。警报将汇总文本和(操作上)附加文件。问题是,当文件变大时,上传时间会更长,UI也会被占用。

这就是我想要做的事情:发布表单后,我希望在后台完成上传,例如使用新线程。背后的想法是用户可以在上传文件时继续工作。

我已经阅读了线程如何工作,我不仅仅看到如何在服务器端应用线程时应用它。

感谢您指点解决方案。

修改

我正在使用ASP.NET MVC 2.O

1 个答案:

答案 0 :(得分:0)

如果你谈论ASP.NET,你首先要从工具箱中添加 ScriptManager (在AJAX Extensions下)。

然后添加 AsyncFileUpload 控件(来自AjaxToolKit)。

此控件在属性中具有OnClientUploadComplete事件。将其绑定到一个功能,例如 uploadComplete

您的ASPX代码应如下所示:

<head runat="server">
    <title></title>
    <script type = "text/javascript">
        function uploadComplete(sender) {
            $get("<%=Label1.ClientID%>").style.color = "blue";
            $get("<%=Label1.ClientID%>").innerHTML = "Successfully Uploaded";
        }

        function uploadError(sender) {
            $get("<%=Label1.ClientID%>").style.color = "red";
            $get("<%=Label1.ClientID%>").innerHTML = "Upload failed.";
        }
    </script>
</head>

<body>
   <form id="form1" runat="server">
   <asp:Label ID="Label2" runat="server" Text="Asynchronous File Uploading"
       ForeColor="#000066"></asp:Label>
       <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <asp:AsyncFileUpload OnClientUploadError="uploadError"
            OnClientUploadComplete="uploadComplete" runat="server"
            ID="AsyncFileUpload1" Width="400px" UploaderStyle="Modern"
            CompleteBackColor = "White"
            UploadingBackColor="#CCDDEE"  ThrobberID="inProgress"
            OnUploadedComplete = "FileUploadComplete"
          />
        <asp:Image ID="inProgress" runat="server" ImageUrl = "~/inProgress.gif" />
        <br />
       <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
    </form>
</body>

您的代码隐藏文件(.cs)应如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class AjaxUploadFile : System.Web.UI.Page
{

    protected void FileUploadComplete(object sender, EventArgs e)
    {

        string savePath = @"F:\BLOG\Projects\InsertData\UploadedFiles\";
        string filename = AsyncFileUpload1.FileName;

        if (AsyncFileUpload1.HasFile)
        {
            savePath += filename;
            AsyncFileUpload1.SaveAs(savePath);

        }

    }
}

这应该为您提供所需的异步文件上传功能。您可以从http://www.asp.net/ajaxlibrary/AjaxControlToolkitSampleSite/

获取AjaxToolKit