我目前正在尝试编写一些代码来接受一些 FTP 详细信息,获取文件列表,然后允许用户下载文件。
这一切都很好,除了我必须等待文件完成下载才能执行任何操作。我正在使用异步控制器,因为我认为这是为了帮助解决这类问题。
请在下面查看我的代码选择,我省略了所有不相关的代码:
[HttpPost]
public ActionResult FtpAsync(Downloads model)
{
var ftpAddress = model.Url;
if (!ftpAddress.StartsWith("ftp://"))
ftpAddress = String.Concat("ftp://", ftpAddress);
var serverPath = Server.MapPath(ThumbnailSupport.CreateBaseVirtualPathForClient(StandardFileLinks.DropBoxLocation,
_website.Client));
if (!Directory.Exists(serverPath))
Directory.CreateDirectory(serverPath);
foreach (string file in model.SelectedFiles)
{
var webClient = new WebClient();
AsyncManager.OutstandingOperations.Increment();
AsyncManager.Parameters["FilesToDownload"] = model.SelectedFiles;
webClient.Credentials = new NetworkCredential(model.Username, model.Password);
webClient.DownloadFileAsync(new Uri(ftpAddress + "/" + file), serverPath + "\\" + file);
AsyncManager.OutstandingOperations.Decrement();
}
return RedirectToAction("Transfer");
}
public ActionResult FtpCompleted(Downloads model)
{
return RedirectToAction("Complete");
}
public ActionResult Transfer()
{
return PartialView();
}
它可以很好地触发 FtpCompleted 操作,但问题是这是为了处理潜在 GB 信息的文件传输。我不希望用户在等待文件下载时坐着看旋转的光盘。因此,我试图将他们重定向到传输操作的原因是,此操作仅显示一条消息,告诉他们传输可能需要一段时间,一旦完成,他们将收到通知。但是,此操作实际上从未被调用。我在调试中逐步执行代码并调用它,但它从不显示消息,并且根据 FireBug 它永远不会到达浏览器。
我是在做一些愚蠢的事情还是不可能做到这一点?
我会很感激人们可以在这里提供的任何帮助,因为我在这里浏览了谷歌和其他帖子后完全被卡住了。即使是我的老板,他是一个更有经验的编码员,也不知道如何处理这个问题。
提前致谢,
天然气