如何在浏览器的进度条中显示FTPWebRequest文件上载的进度?

时间:2013-09-28 03:13:16

标签: c# asp.net-mvc-4

如何在浏览器的进度条中显示FTPWebRequest文件uplaod的进度?

在我的c#MVC 4应用程序中,我已经实现了Blueimp文件上传示例的.Net示例:

http://www.webtrendset.com/2011/06/22/complete-code-example-for-using-blueimp-jquery-file-upload-control-in-asp-net/

此上传使用jquery.fileupload-ui.js插件。

我修改了MVC应用程序中的handler.ashx,使用FTPWebRequest将文件上传到FTP服务器。

当我开始上传文件但进度指示器无法准确显示进度状态时,进度条会起作用

浏览器中的进度条始终表示在FTPWebRequest开始之前已经以浏览器方式完成了进度。

我的处理程序看起来像这样

    public class Handler1 : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            try
            {
                context.Response.ContentType = "text/plain"; //"application/json";

                HttpContext postedContext = HttpContext.Current;


                var r = new System.Collections.Generic.List<ViewDataUploadFilesResult>();

                var js = new JavaScriptSerializer();

                foreach (string file in context.Request.Files)
                {
                    var hpf = context.Request.Files[file] as HttpPostedFile;

uplaodFiles(hpf,pid, id);

   private UploadState uplaodFiles(HttpPostedFile file,Guid pid, string id)
        {


                FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url);

                request.Method = WebRequestMethods.Ftp.UploadFile;

                request.Timeout = 3600000;

                request.Credentials = new NetworkCredential(ftpuser, ftpassword);

                byte[] fileData = null;

                using (Stream input = file.InputStream)
                {
                    using (Stream output = request.GetRequestStream())
                    {
                        input.CopyTo(output);
                    }
                }

我故意省略了上面代码示例的部分内容

2 个答案:

答案 0 :(得分:0)

http://tim.mackey.ie/FtpWebRequestWithProgressBarCFtp.aspx

看看上面的链接。它给出了答案

答案 1 :(得分:0)

听起来你至少已经解决了FtpWebRequest中涉及MVC应用程序的大部分问题。请两个简单的问题。您的实现是否支持上传非常大的文件? (我正在编写我的第一个MVC应用程序,需要通过FTP将非常大的文件(从500MB到近6GB)上传到与MVC UI应用程序共同位于同一VM上的FileZilla FTP服务器。

如果是,您是否会考虑在您的视图,控制器和修订后的handler.ashx中使用下载链接到您正在使用的代码以及连接处理程序所需的内容?

我发现大量的非网络应用程序示例和一些用于旧式服务器端ASP.Net应用程序的示例,但是对于MVC来说都没有,它们可以通过需要的技术克服上传的2GB限制IIS缓冲整个文件。

谢谢! -Bob