找回密码
 立即注册

QQ登录

只需一步,快速开始

phoben 讲师达人认证 悬赏达人认证 活字格认证
论坛元老   /  发表于:2023-11-1 12:41  /   查看:1747  /  回复:1
本帖最后由 phoben 于 2023-11-1 12:48 编辑

场景:与第三方系统对接时,无论是发送POST请求还是接收别人的请求,都存在需要接收文件的情况。

需求:
    1. 发送POST请求时,body中允许同时携带普通数据和文件数据。
        在C#中,实际上就是允许定义StringContent和fileContent

    2. 服务端命令中可以接收一个文件类型的参数,并可在命令中获取这个文件保存到本地,形成一个文件名
        在C#中,实际上就是将接收的文件数据的FileStream读取到本地,然后根据用户指定的文件名保存到Upload文件夹中,并返回文件名。

总结:无论是发送请求还是接收别人的请求,都能对文件做出响应处理,下方是发送请求和接收请求的伪代码例子。

发送POST请求
  1. using System;
  2. using System.Net.Http;
  3. using System.IO;
  4. using System.Threading.Tasks;

  5. class Program
  6. {
  7.     static async Task Main()
  8.     {
  9.         using (var client = new HttpClient())
  10.         {
  11.             // 设置服务器端接收请求的URL
  12.             var url = "你的服务器地址";

  13.             // 创建MultipartFormDataContent
  14.             using (var content = new MultipartFormDataContent())
  15.             {
  16.                 // 添加字符串参数
  17.                 content.Add(new StringContent("your_username"), "username");
  18.                 content.Add(new StringContent("your_filesname"), "filesname");

  19.                 // 添加文件
  20.                 var filePaths = new[] { "file1.pdf", "file2.jpg", "file3.png", "file4.xlsx", "file5.docx" };
  21.                 foreach (var filePath in filePaths)
  22.                 {
  23.                     var fileInfo = new FileInfo(filePath);
  24.                     var fileStream = new FileStream(filePath, FileMode.Open);
  25.                     var fileContent = new StreamContent(fileStream);
  26.                     content.Add(fileContent, "files", fileInfo.Name);
  27.                 }

  28.                 // 发送POST请求
  29.                 var response = await client.PostAsync(url, content);

  30.                 // 读取服务器端返回的结果
  31.                 var responseContent = await response.Content.ReadAsStringAsync();
  32.                 Console.WriteLine(responseContent);
  33.             }
  34.         }
  35.     }
  36. }
复制代码



接收请求

  1. using Microsoft.AspNetCore.Http;
  2. using Microsoft.AspNetCore.Mvc;
  3. using System;
  4. using System.IO;
  5. using System.Threading.Tasks;

  6. [Route("api/[controller]")]
  7. [ApiController]
  8. public class FileUploadController : ControllerBase
  9. {
  10.     [HttpPost]
  11.     public async Task<IActionResult> Upload(IFormCollection form)
  12.     {
  13.         try
  14.         {
  15.             // 获取参数
  16.             var username = form["username"];
  17.             var filesname = form["filesname"];

  18.             // 打印参数
  19.             Console.WriteLine($"Username: {username}");
  20.             Console.WriteLine($"Filesname: {filesname}");

  21.             // 获取文件
  22.             var files = form.Files;
  23.             foreach (var file in files)
  24.             {
  25.                 if (file.Length > 0)
  26.                 {
  27.                     // 设置保存文件的路径
  28.                     var filePath = Path.Combine("上传文件的保存路径", file.FileName);

  29.                     // 创建文件流并保存文件
  30.                     using (var stream = new FileStream(filePath, FileMode.Create))
  31.                     {
  32.                         await file.CopyToAsync(stream);
  33.                     }

  34.                     Console.WriteLine($"File {file.FileName} uploaded successfully!");
  35.                 }
  36.             }

  37.             return Ok("Files uploaded successfully");
  38.         }
  39.         catch (Exception ex)
  40.         {
  41.             return StatusCode(500, $"Internal server error: {ex}");
  42.         }
  43.     }
  44. }
复制代码





1 个回复

倒序浏览
David.Zhong讲师达人认证 悬赏达人认证 活字格认证
论坛元老   /  发表于:2023-11-1 14:04:24
沙发
发送http请求命令支持文件这个已经记过需求啦,需求编号:42371。

关于接收文件类型返回值,可以用发送http请求命令,请求数据,再用保存内容到文件命令保存,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部