[HttpPost]
public async Task<IActionResult> PostFormData([FromForm] IFormFile file)
{
using (var sr = new StreamReader(file.OpenReadStream()))
{
var content = await sr.ReadToEndAsync();
return Ok(content);
}
}
[HttpPost]
public async Task<IActionResult> PostBinary()
{
using (var sr = new StreamReader(Request.Body))
{
var body = await sr.ReadToEndAsync();
return Ok(body);
}
}
if (File.Length> 0)
{
using (var ms = new MemoryStream())
{
File.CopyTo(ms);
var fileBytes = ms.ToArray();
string s = Convert.ToBase64String(fileBytes);
}
}
2条答案
按热度按时间ttygqcqt1#
正如您已经注意到的,在Postman/Insomnia中使用
binary file
选项并不是标准的工作方式。通过RESTful API上传文件有三种不同的方式,您必须选择一种。我已经包含了一些代码片段,它们将上传的文件内容读取到一个字符串中并输出--尝试发送一个文本文件,您应该在200响应中获得文件的内容。
这是最流行的上传方法,它将您发送的数据格式化为一组键/值对。您通常需要在请求中指定
Content-Type
到multipart/form-data
,然后使用MVC中的[FromForm]
属性将值绑定到变量。此外,您可以使用内置的IFormFile
类来访问上传的文件。你可以用MVC理解的格式发送正文,比如JSON,然后把文件嵌入其中。通常,文件内容会用Base64或其他编码来编码,以防止字符编码/解码问题,特别是当你发送图像或二进制数据时。
然后在控制器内指定
[FromBody]
,并使用类进行模型反序列化。当使用大型非文本文件时,JSON请求变得笨拙且难以读取。
这里的关键点是,您的文件是 * 整个请求 *。请求不包含任何额外的信息来帮助MVC将值绑定到代码中的变量。因此,要访问该文件,您需要在
Request
中读取Body
。Body
读作string
.您可能希望在应用程序中使用Stream
或byte[]
,以避免文件数据编码问题.a8jjtwal2#
除上述内容外,在将多部分文件转换为base64String的情况下,您可以参考以下内容: