2013-11-22 56 views
0

用户可以向一组用户发送警报。警报将适合文本和(操作上)附加文件。问题在于,当文件变大时,上传需要更长的时间,用户界面也会受到限制。如何异步上传大文件

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

我已经阅读了线程是如何工作的,我不会看到如何将线程应用到服务器端。

感谢您指点我的解决方案。

编辑

我使用ASP.NET MVC 2.O

+0

这是什么类型的应用程序? ASP.NET? – Yahia

+0

地铁?的WinForms? WPF? Silverlight的? Windows Phone? ASP.Net? MonoTouch的? – SLaks

+0

像gmail如何做它? http://stackoverflow.com/questions/135123/how-can-i-get-gmail-like-file-uploads-for-my-web-app –

回答

0

如果你谈论ASP.NET,你会先添加一个的ScriptManager从工具箱(下AJAX扩展)。

然后添加一个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

+0

我正在使用ASP.NET MVC 2 – Richard77