現在、処理中のファイルの進行状況レポートをユーザーに提示するための signalR の使用を検討しています。asp.net MVC 4 を使用しています。Ajax 経由で投稿/取得する場合、ステータスの変更に問題はありません。
ファイルをアップロードする必要があるため (ajax を使用しないため、1: ファイルを送信するためにユーザーに js を有効にするよう要求することはできません。2: おそらく HTML5 を除いて、そのようなタスクをすぐに実行できるとは思いません)。 .
編集: ユーザーに JS を要求することはできないと言うとき、それはコア機能であるため、ファイルの送信が JS に依存できないことを意味します。ただし、JS を有効にしている方は、処理の進行状況や別のプログラムへのインポートを確認できるようにしてください。現在、実際のファイル転送の進行状況には関心がありませんが、プログラムへのインポートの現在の状態にステータス メッセージを送り返すことに関心があります。
フォーム Post を呼び出した後、ファイルの処理中に進行状況を更新するという目標を達成するには、どのようなアプローチが提案されますか? ノート:
コード例:
$(function () {
var fileUploadHub = $.connection.fileUploadHub;
fileUploadHub.updateProgress = function (value) {
updateProgressBar(value);
};
fileUploadHub.updateStatusText = function (text) {
alert("you got to updateStatus");
updateText(text);
};
$.connection.hub.logging = true;
$.connection.hub.start();
});
function updateProgressBar(value) {
$("#progressbar").progressbar({ value: value });
}
function updateText(text) {
$("#statusText").append("<li>" + text + "</li>");
}
//Form : モデルに裏打ちされた
@using (Html.BeginForm( "UploadFile", "FileUpload", FormMethod.Post,
new { enctype = "multipart/form-data"}))
{
<input type="file" id="Files" name="Files" accept="text/xml" />
<br />
<input type="submit" id="submitButton" value="Submit" />
}
コントローラ:
public ActionResult SubmitFile(MyModel model)
{
...
ProcessFile(model.file)
...
}
public void ProcessFile(File file)
{
var myHub = GlobalHost.ConnectionManager.GetHubContext<FileUploadHub>();
myHub.Clients.updateStatusText("testz");
}
ハブ クラス:
public class FileUploadHub : Hub
{
}