Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在浏览器的进度栏中显示FTPWebRequest文件上载的进度?_C#_Asp.net Mvc 4 - Fatal编程技术网

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

C# 如何在浏览器的进度栏中显示FTPWebRequest文件上载的进度?,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,如何在浏览器的进度栏中显示FTPWebRequest文件上传的进度 在我的c#MVC 4应用程序中,我实现了Blueimp文件上传示例的.Net示例,可在此处找到: 此上载使用jquery.fileupload-ui.js插件 我修改了MVC应用程序中的handler.ashx,使用FTPWebRequest将文件上载到FTP服务器 当我开始上传文件时,进度条会工作,但进度指示器不能准确显示进度状态 浏览器中的进度条始终指示在FTPWebRequest开始之前已以浏览器方式完成进度 我的处理程

如何在浏览器的进度栏中显示FTPWebRequest文件上传的进度

在我的c#MVC 4应用程序中,我实现了Blueimp文件上传示例的.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);
                    }
                }
公共类句柄1:IHttpHandler
{
公共void ProcessRequest(HttpContext上下文)
{
尝试
{
context.Response.ContentType=“text/plain”/“application/json”;
HttpContext postedContext=HttpContext.Current;
var r=new System.Collections.Generic.List();
var js=新的JavaScriptSerializer();
foreach(context.Request.Files中的字符串文件)
{
var hpf=context.Request.Files[file]作为HttpPostedFile;
上传文件(hpf、pid、id);
私有上传状态上传文件(HttpPostedFile文件,Guid pid,字符串id)
{
FtpWebRequest=(FtpWebRequest)WebRequest.Create(url);
request.Method=WebRequestMethods.Ftp.UploadFile;
请求超时=3600000;
request.Credentials=新的网络凭据(ftpuser、ftpassword);
字节[]fileData=null;
使用(流输入=file.InputStream)
{
使用(流输出=request.GetRequestStream())
{
输入。复制到(输出);
}
}
我故意省略了上面代码示例的部分内容


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

听起来您至少解决了MVC应用程序FtpWebRequest中涉及的大部分问题。请回答两个快速问题。您的实现是否支持上传超大文件?(我正在编写第一个需要上传超大文件的MVC应用程序(从500MB到近6GB)通过FTP连接到与MVC UI应用程序位于同一虚拟机上的FileZilla FTP服务器)

如果你这样做,你会考虑在你的视图、它的控制器和修改的HANDL.ASHX中使用一个下载链接吗? 我发现了很多非web应用程序的例子,也有一些是老式的服务器端ASP.Net应用程序的例子,但对于MVC来说,没有一个例子可以通过需要IIS缓冲整个文件的技术来克服上传2GB的限制

谢谢!
-Bob

我以前见过这个答案,但这是web MVC应用程序。这是一个棘手的部分。如果这是一个常规表单应用程序,那么它会更容易。您有没有在ftpwebrequest上显示进度条的解决方案?