【发布时间】:2016-07-01 11:23:14
【问题描述】:
我在尝试使用 angularjs 控制器推送数据时遇到问题。但是我所做的(IFormFile 文件)总是空的。只有一些使用 razor 语法的示例,但没有使用 angular 或 jquery 的示例。
HTML:
<form class="form-body" enctype="multipart/form-data" name="newFileForm" ng-submit="vm.addFile()"><input type="file" id="file1" name="file" multiple ng-files="getTheFiles($files)"/></form>
指令:
(function() {
'use strict';
angular
.module('app')
.directive('ngFiles', ['$parse', function ($parse) {
function fn_link(scope, element, attrs) {
var onChange = $parse(attrs.ngFiles);
element.on('change', function (event) {
onChange(scope, { $files: event.target.files });
});
};
return {
link: fn_link
};
}]);
})();
控制器
var formdata = new FormData();
$scope.getTheFiles = function ($files) {
angular.forEach($files, function (key, value) {
formdata.append(key, value);
});
};
vm.addFile = function () {
var xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.setRequestHeader("Content-Type", "undefined");
xhr.send(formdata);
}
Asp.net 核心 webapi:
[HttpPost]
public async Task<IActionResult> PostProductProjectFile(IFormFile file)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
....
return ...;
}
我也尝试过使用 formdata,因为它是在您使用 razor 语法发布时构建的。像这样的:
dataService.addFile(formdata, {
contentDisposition: "form-data; name=\"files\"; filename=\"C:\\Users\\UserName\\Desktop\\snip_20160420091420.png\"",
contentType: "multipart/form-data",
headers: {
"Content-Disposition": "form-data; name=\"files\"; filename=\"C:\\Users\\UserName\\Desktop\\snip_20160420091420.png\"",
'Content-Type': "image/png"
},
fileName: "C:\\Users\\UserName\\Desktop\\snip_20160420091420.png",
name: "files",
length : 3563
}
也代替 formData 来提供原始文件,正如我在评论中所写的那样。但仍然没有任何反应
【问题讨论】:
-
如果您可以分享您的请求正文的外观将会有所帮助(我对发布的文件内容不感兴趣,但其他所有内容)。您可以从浏览器的开发者工具诊断中获取它。
-
这是 rawfile
lastModified:1461136463443 lastModifiedDate:Wed Apr 20 2016 09:14:23 GMT+0200 (W. Europe Daylight Time) name:"snip_20160420091420.png" size:3563 type:"image/png" webkitRelativePath:""当它是表单数据时,我无法读取它,它只是__proto__:FormData
标签: asp.net angularjs file-upload asp.net-core