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