我无法将上传的文件传递到控制器中。
这是我的控制器:
[System.Web.Http.HttpPost]
[System.Web.Http.Authorize(Roles = "Admin")]
public string UploadFile()
{
var file = HttpContext.Current.Request.Files.Count > 0 ? HttpContext.Current.Request.Files[0] : null;
if (file != null && file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(
HttpContext.Current.Server.MapPath("~/uploads"),
fileName
);
file.SaveAs(path);
}
return Helpers.JsonHelper.Stringify(new { success = true });
}
这是Angularjs:
var uploadFileToUrl = function (file, uploadUrl, progressCB) {
var token = $('input[name="__RequestVerificationToken"]').val();
var form = new FormData();
$(file).each(function (i, el) {
form.append('file', el, el.name);
})
$http.post(uploadUrl, form, {
headers: { "Authorization": "Basic " + token, "Content-Type": 'multipart/form-data' },
uploadEventHandlers: {
progress: progressCB
}
});
}
在调用uploadFileToUrl
之前,将文件设置为setViewValue()
以在上传(预览)之前显示图像。
因此,该指令中的某处有:
app.directive("selectNgFiles", function () {
return {
require: "ngModel",
link: function postLink(scope, elem, attrs, ngModel) {
elem.on("change", function (e) {
var files = elem[0].files;
ngModel.$setViewValue(files);
})
}
}
});
但是我想这不会引起问题吧?
问题是HttpContext.Current.Request.Files
始终为空,甚至以为我已经在formData
中设置了它。为什么它总是空的?
请查看附带的Chrome调试图像。