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 里一般就是指表单数据,用在网页表单里提交

posted @ 2022-10-11 16:06  ZerryLuo  阅读(3458)  评论(0编辑  收藏  举报