如何解决如何以编程方式将 .NET 5 中的文件上传到 .NET 5 Rest API 而不会丢失内容?
我创建了一个 .NET 5 REST Api。我可以轻松地从 swagger 上传文件。那工作正常。调试的时候可以看到字节数组不为空。这是控制器方法:
[Route("api/[controller]")]
[ApiController]
public class ImageController : ControllerBase
{
// POST api/<ImageController>
[HttpPost]
public void Post([FromForm] UserModel info)
{
var memoryStream = new MemoryStream();
info.Avatar.CopyTo(memoryStream);
var bytes = memoryStream.ToArray();
}
}
这是UserModel
:
public class UserModel
{
[FromForm(Name = "avatar")]
public IFormFile Avatar { get; set; }
[FromForm(Name = "name")]
public string Name { get; set; }
}
我还尝试以编程方式上传文件。这并不完全有效。在控制器方法中放置断点时,我看到字节数组为空。所以调用本身正在工作,但没有输入数据。
这是用于上传文件的 .NET 5 控制台应用程序的源代码。
正如所解释的,这做了一些有用的事情,因为它确实调用了 REST API,我可以通过在控制器方法中放置断点来看到它。但是,我的控制器方法没有获取任何数据。字节数组为空。
private static async Task TryUpload()
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:5000");
string filePath = "C:\\Users\\daan1982\\Pictures\\RiderStart.png";
var fileStream = File.Create(filePath);
using (var content =
new MultipartFormDataContent("Upload----" + DateTime.Now.ToString(CultureInfo.InvariantCulture)))
{
content.Add(new StreamContent(fileStream),"avatar","RiderStart.png");
var result = await client.PostAsync("/api/Image",content);
var request = result.RequestMessage;
}
}
}
static async Task Main(string[] args)
{
await TryUpload();
Console.WriteLine("Hello World!");
}
当我在上传和请求模型中将内容命名为“头像”时,这应该可以正常工作。但是,它确实有效但效果不佳,因为字节数组始终为空。
我做错了什么?我该如何解决这个问题?
解决方法
File.Create
"creates or overwrites a file in the specified path."
您可能想要File.OpenRead
。
这就是我的工作方式。
static async Task Main(string[] args)
{
await TryUpload();
}
private const string Boundary = "EAD567A8E8524B2FAC2E0628ABB6DF6E";
private static readonly HttpClient HttpClient = new()
{
BaseAddress = new Uri("https://localhost:5001/")
};
private static async Task TryUpload()
{
var requestContent = new MultipartFormDataContent(Boundary);
requestContent.Headers.Remove("Content-Type");
requestContent.Headers.TryAddWithoutValidation("Content-Type",$"multipart/form-data; boundary={Boundary}");
var fileContent = await File.ReadAllBytesAsync(@"<path to file\Unbenannt.PNG");
var byteArrayContent = new ByteArrayContent(fileContent);
byteArrayContent.Headers.ContentType = MediaTypeHeaderValue.Parse("image/png");
requestContent.Add(byteArrayContent,"avatar","Unbenannt.PNG");
var postResponse = await HttpClient.PostAsync("/api/Image",requestContent);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。