.net core上傳文件時的參數通常是
public async Task<Result<bool>> Improt(IFormFile file){}
public async Task<Result<bool>> Improt(IFormFileCollection file){}
然而這樣在前端傳值的時候返回值會是null
需要再參數前面添加[FromForm]
public async Task<Result<bool>> Improt([FromForm]IFormFile excelfile){}
改完之后,在前端發送請求的時候還需要注意,普通的ajax請求並不能把文件傳到后台,需要修改一定的參數,或者使用表單提交。
前端代碼如下:
<form id="form1" method="post" action="" enctype="multipart/form-data"> <div class="layui-form-item"> <div class="layui-input-block"> <input type="file" id="fileUp" name="excelfile" lay-verify="title" autocomplete="off"> </div> </div> <div class="layui-form-item"> <div class="layui-input-block"> <button type="button" class="layui-btn layui-btn-primary" onclick=" return upload()">確認導入</button> </div> </div> </form>
用ajax請求以表單的方式調用你的api接口
<script type="text/javascript">
function upload() {
var fileM = document.querySelector("#fileUp");
var fileObj = fileM.files[0];
if (fileObj == null) {
alert("請先上傳文件再提交!");
return;
}
if (confirm("是否確認此操作?") == false) {
return;
}
window.isLoading = layer.msg('正在導入,請稍后...', {
icon: 16,
shade: 0.3,
time: 0
});
//使用formdata對象獲取表單的數據
var formData = new FormData(document.getElementById('form1'));
$.ajax({
url: 你的url,
type: 'POST',
data: formData,
processData: false,
contentType: false,
xhrFields: {
withCredentials: true
},
crossDomain: true,
success: function (obj) {
if (obj.flag) {
layer.alert("導入成功!");
} else {
layer.alert(obj.msg, { icon: 2 });
}
layer.close(window.isLoading);
window.isLoading = null;
},
error: function (obj) {
layer.alert('網絡繁忙,請刷新重試!!', { icon: 2 });
layer.close(window.isLoading);
window.isLoading = null;
}
})
}
</script>
