私は現在、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によると、メッセージが表示されず、ブラウザーに到達しません。
私は愚かなことをしていますか、それともこれを行うことは不可能ですか?
ここでグーグルや他の投稿を閲覧した後、私は完全に立ち往生しているので、人々がここで提供できるどんな援助にも感謝します。はるかに経験豊富なコーダーである私の上司でさえ、これをどのように処理するかがわかりません。
前もって感謝します、
ガズ