我有一个 C# .NET Core Web API( REST )。 我想为上传文件实现一个端点,为下载文件实现一个(任何文件类型,以二进制形式)。 设计和代码的最佳实践是什么?到目前为止,我在搜索引擎中发现的时间是一周。 您对我有建议吗? 我想我必须将元数据(如标题(类型,..?))保存在其他地方。可以使搜索文件更加容易。
在来自microsoft的此链接上,我遇到了一个问题,那就是它似乎仅适用于MVC API,我没有使用。
之后
[HttpPost("UploadFiles")]
public async Task<IActionResult> Post(List<IFormFile> files)
files
为空。
c-sharpcorner中的代码不能更整洁地工作。我的IFormFile
类型的目标文件不知道该方法。GetFilename()
。
答案 0 :(得分:2)
如果查看IFormFile
文档,您会发现它具有属性FileName
,可以使用:
https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.iformfile?view=aspnetcore-2.2
因此,举例来说,您可以使用该属性并将其保存在该属性的任何位置。在我的情况下,将文件写入存储的所有低级内容都隐藏在存储库中,但是您会想到:
public async Task<IActionResult> Upload(IFormFile file)
{
if (file == null || file.Length == 0) return BadRequest();
using (var ms = new MemoryStream())
{
file.CopyTo(ms);
var img = new Entities.Image
{
Name = file.FileName,
ContentType = file.ContentType,
Data = ms.ToArray()
};
await _repo.CreateImage(img);
return Ok();
}
}
答案 1 :(得分:2)
关于如何使用.net core at this location.上传/下载文件,有一篇非常不错的文章。该教程同样适用于Web API。
我检查了您的问题,认为它不适合您,许多人想通过邮递员/提琴手检查请求,并检查数据是否正确发送。 This blog包含文件上传Web API的示例
为获取文件名,IFormFile的定义如下:
public interface IFormFile
{
string ContentType { get; }
string ContentDisposition { get; }
IHeaderDictionary Headers { get; }
long Length { get; }
string Name { get; }
string FileName { get; }
Stream OpenReadStream();
void CopyTo(Stream target);
Task CopyToAsync(Stream target, CancellationToken cancellationToken = null);
}
因此,您应该可以使用属性FileName
来获取文件名。