.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>