本帖最后由 phoben 于 2023-11-1 12:48 编辑
场景:与第三方系统对接时,无论是发送POST请求还是接收别人的请求,都存在需要接收文件的情况。
需求:
1. 发送POST请求时,body中允许同时携带普通数据和文件数据。
在C#中,实际上就是允许定义StringContent和fileContent
2. 服务端命令中可以接收一个文件类型的参数,并可在命令中获取这个文件保存到本地,形成一个文件名
在C#中,实际上就是将接收的文件数据的FileStream读取到本地,然后根据用户指定的文件名保存到Upload文件夹中,并返回文件名。
总结:无论是发送请求还是接收别人的请求,都能对文件做出响应处理,下方是发送请求和接收请求的伪代码例子。
发送POST请求
- using System;
- using System.Net.Http;
- using System.IO;
- using System.Threading.Tasks;
- class Program
- {
- static async Task Main()
- {
- using (var client = new HttpClient())
- {
- // 设置服务器端接收请求的URL
- var url = "你的服务器地址";
- // 创建MultipartFormDataContent
- using (var content = new MultipartFormDataContent())
- {
- // 添加字符串参数
- content.Add(new StringContent("your_username"), "username");
- content.Add(new StringContent("your_filesname"), "filesname");
- // 添加文件
- var filePaths = new[] { "file1.pdf", "file2.jpg", "file3.png", "file4.xlsx", "file5.docx" };
- foreach (var filePath in filePaths)
- {
- var fileInfo = new FileInfo(filePath);
- var fileStream = new FileStream(filePath, FileMode.Open);
- var fileContent = new StreamContent(fileStream);
- content.Add(fileContent, "files", fileInfo.Name);
- }
- // 发送POST请求
- var response = await client.PostAsync(url, content);
- // 读取服务器端返回的结果
- var responseContent = await response.Content.ReadAsStringAsync();
- Console.WriteLine(responseContent);
- }
- }
- }
- }
复制代码
接收请求
- using Microsoft.AspNetCore.Http;
- using Microsoft.AspNetCore.Mvc;
- using System;
- using System.IO;
- using System.Threading.Tasks;
- [Route("api/[controller]")]
- [ApiController]
- public class FileUploadController : ControllerBase
- {
- [HttpPost]
- public async Task<IActionResult> Upload(IFormCollection form)
- {
- try
- {
- // 获取参数
- var username = form["username"];
- var filesname = form["filesname"];
- // 打印参数
- Console.WriteLine($"Username: {username}");
- Console.WriteLine($"Filesname: {filesname}");
- // 获取文件
- var files = form.Files;
- foreach (var file in files)
- {
- if (file.Length > 0)
- {
- // 设置保存文件的路径
- var filePath = Path.Combine("上传文件的保存路径", file.FileName);
- // 创建文件流并保存文件
- using (var stream = new FileStream(filePath, FileMode.Create))
- {
- await file.CopyToAsync(stream);
- }
- Console.WriteLine($"File {file.FileName} uploaded successfully!");
- }
- }
- return Ok("Files uploaded successfully");
- }
- catch (Exception ex)
- {
- return StatusCode(500, $"Internal server error: {ex}");
- }
- }
- }
复制代码
|
|