.NET5 WebAPI 上传、下载文件,基于 IFormFile

  1.  IFormFile 使用可以看官方文档
  2.  上传端(客户端),通过文件流的方式 进行上传调用接口 POST
    MultipartFormDataContent构造参数和文件对象
           public async Task<ActionResult<dynamic>> UploadTestAsync()
            {
                var fileAdd = @"D:\UploadReport\中国调查报告-张某某(绿灯).doc";
    
                FileStream fileStream = new FileStream(fileAdd, FileMode.Open);
                using (var multipartContent = new MultipartFormDataContent())
                {
                    //multipartContent.Add(new ByteArrayContent(System.IO.File.ReadAllBytes(fileAdd)), "File", "中国调查报告(绿灯).doc");
                    //文件对象 File 需要接受方的参数一致
                    multipartContent.Add(new StreamContent(fileStream), "File", @"调查报告-张某某(绿灯).doc");
    
                    // 构建其他上传参数
                    multipartContent.Add(new StringContent("CS21040800001"), "OrderId");
                    multipartContent.Add(new StringContent("测试版本"), "ReprotVersion");
                    multipartContent.Add(new StringContent("测试"), "BusinessOrigin");
    
                    using (var httpClient = new HttpClient())
                    {
                        httpClient.BaseAddress = new Uri("http://IP:7123");
                        return  await httpClient.PostAsync("/XXX/File/UploadAsync", multipartContent);
                    }
                }
            }

     

  3. 上传文件接口:服务端(接受端) 接受上传文件流 IFormFile接受文件对象
     
        public async Task<IActionResult> UploadAsync([FromForm] FileReportDto fileModel)
       {
                 //需要存储文件
                   var filefullPath = @"D:\UploadReport\中国调查报告-张某某1(绿灯)3.doc";
                    using (FileStream fs = new FileStream(filefullPath, FileMode.Create))
                    {
                        fileModel.File.CopyTo(fs);
                        fs.Flush();
                    }
    
                 //拿到文件流可以做其他操作 ,结合自己业务
        }
       // FileReportDto 对象
       public class FileReportDto
        {
            /// <summary>
            /// 
            /// </summary>
            public string OrderId { get; set; }
    
            /// <summary>
            /// 报告文件对象
            /// </summary>
            public IFormFile File { get; set; }
    
            /// <summary>
            /// 
            /// </summary>
            public string ReprotVersion { get; set; }
    
            /// <summary>
            /// 
            /// </summary>
            public string BusinessOrigin { get; set; }
        }

     

  4.  下载文件接口 (文件流方式)
     public async Task<IActionResult> DownStreamAsync(string orderId)
            {
                try
                {
                   //获取文件信息 ,自己的业务
                   
                   //下载文件
                       using (WebClient wclient = new WebClient())
                        {
                           //从远程获取文件流(本地也可以获取),参考客户端方法
                            var fileStream = wclient.OpenRead(https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2019/05/dotnet5_platform.png);
                      
                           //获取文件扩展名,并返回对应的文件类型      
                            var ext = fileResult.FileName.Substring(fileResult.FileName.LastIndexOf("."));
                            new FileExtensionContentTypeProvider().Mappings.TryGetValue(ext, out var contenttype);
                            return File(fileStream, contenttype ?? "application/octet-stream", fileResult.FileName);
                        }
                }
                catch (Exception ex)
                {
                    _nLogHelper.Error($"下载异常【】,{ex.Message}");
                    return new JsonResult(new ReturnResult<string> { IsSuccess = false, Message = $"下载异常:{ex.Message}", Data = $"" });
                }
            }
    

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值