c#实现上传文件
[HttpPost] public string Postfile([FromForm]IFormCollection formCollection) {
//标识一个结果变量 string result = "Fail"; //获取表单提交当中的文件,并将其强转为FormFileCollection FormFileCollection fileCollection = (FormFileCollection)formCollection.Files;
//遍历fileCollection foreach (var file in fileCollection) {
//打开请求流以获取上传的文件 StreamReader reader = new StreamReader(file.OpenReadStream());
//从流的当前位置到末尾读取所有字符,如果当前位置位于流的末尾,则返回空字符串“” String content = reader.ReadToEnd();
//获取文件的名称 String name = file.FileName;
//保存文件的路径 String filename = @"D:/桌面/" + name;
//if (System.IO.File.Exists(filename))
//{
// System.IO.File.Delete(filename);
//}
//在指定路径中创建或覆盖文件 using (FileStream fs = System.IO.File.Create(filename)) { // 复制文件 file.CopyTo(fs); // 清空缓冲区数据 fs.Flush(); } result = "Success"; } return result; }
接下来用postman测试:选择body,选择form-data,第三步下拉选择file,第四步选择上传文件,然后就可以点击Send进行测试了
然后就会看见在指定路径上有该文件。
扩展:
FromBody:当请求的 content-type 为 application/json 时,可以不加上这个特性,因为当入参类型为实体类时,系统默认从请求体(body)中获取数据,在这里建议大家加上;
FromForm:当请求属于表单提交,也就是 content-type 为 application/x-www-form-urlencoded,则必须给参数加上 FromForm 特性,否者会报 400 错误;
FromQuery:获取地址烂参数,当接口参数是一个实体类时,建议必须加上该特性;
FromHeader:获取请求头参数;
FromRoute:获取路由参数,这个可能有些小伙伴会很疑惑,我贴出个代码大家就懂了:
一般建议的风格:
route 放的是query实体的主键id
header 里放的是身份认证 以及分页信息
query 里放的是对于主键条件的补充查询条件
body 里放的是需要更新的实体数据
form 里一般就是指表单数据,用在网页表单里提交