目前正在研究使用 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
{
}