我正在尝试通过使用jQuery将表单发布到我的控制器操作方法中来从javascript上传文件。我不想等待结果,想立即返回。这就是为什么我叫Task.Factory.StartNew
并返回布尔值的原因。但是我收到错误消息“无法访问任务正文中的关闭文件!”。请告知。
[HttpPost]
public bool UploadAll(HttpPostedFileBase fileSelect)
{
Task.Factory.StartNew<string>((st) =>
{
var file = st as HttpPostedFileBase;
if (file != null)
{
// Here is where I get the error "cannot access the closed file!"
file.SaveAs("E:\\" + file.FileName);
return file.FileName;
}
return string.Empty;
}, fileSelect).ContinueWith((tsk) =>
{
Debug.WriteLine(tsk.Result);
});
return true;
}
客户端
$(function () {
//getAllVideos();
$('#upload').submit(function (e) {
e.preventDefault();
var files = $("#fileSelect")[0].files;
if (files.length > 0) {
if (window.FormData !== undefined) {
var formData = new FormData($(this)[0]);
$.ajax({
url: uploadUrl,
method: "post",
cache: false,
contentType: false,
processData: false,
data: formData
}).done(function (result) {
alert(result);
}).fail(function () {
});
});
});
}());
答案 0 :(得分:1)
当请求“完成”时(在这种情况下,当您return true
时),请求被关闭/处分是预期的行为。在那一点之后,与请求/响应相关的对象将无法使用,而这正是您通过延迟从输入流中读取内容来尝试执行的操作。
修复:
MemoryStream
并将其保存到文件中。可能不适用于大文件。