ASP.NET Core实现附件上传与下载的示例详解
在ASP.NET Core中,文件上传和下载是常见需求。以下是如何实现这些功能的具体步骤:
文件上传
在文件上传中,ASP.NET Core提供IFormFile
接口用于处理上传文件。IFormFile
代表了客户端上传的单个文件,可访问文件名、内容类型、长度以及内容读取。以下是一个典型的文件上传控制器方法:
[HttpPost("upload")]
[DisableRequestSizeLimit] //禁用默认大小限制
[RequestSizeLimit(100 * 1024)] //最大上传文件大小100MB
public async Task Post(List files)
{
foreach (var file in files)
{
if (file.Length > 0)
{
var uniqueFileName = Guid.NewGuid().ToString() + Path.GetExtension(file.FileName);
var filePath = Path.Combine("Uploads", uniqueFileName);
Directory.CreateDirectory(Path.GetDirectoryName(filePath));
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
}
}
return Ok("Files uploaded successfully");
}
在这个示例中,[DisableRequestSizeLimit]
和[RequestSizeLimit]
属性控制文件大小限制,遍历files
列表并为每个文件生成唯一的文件名,确保上传文件不会重名。
文件下载
文件下载的实现相对简单,核心是创建一个HTTP响应来告知浏览器下载文件。以下是一个文件下载的方法:
public IActionResult Download(string fileName)
{
var filePath = GetFilePath(fileName); // 获取文件路径
if (filePath == null) return NotFound();
var stream = new FileStream(filePath, FileMode.Open);
return File(stream, "application/octet-stream", fileName);
}
在该方法中,GetFilePath
返回文件的完整路径。File
方法将文件流传递给浏览器,指定MIME类型并提供下载文件名。
安全和最佳实践
- 验证文件大小和类型:确保文件符合预期的大小和类型,防止上传过大的文件或不安全文件。
- 存储安全:将文件保存在安全目录,避免公开访问。
- 异常处理:使用
try-catch
处理文件操作异常并返回友好错误。 - 文件命名:使用唯一ID命名文件,防止文件名冲突。
- 权限控制:限制用户下载权限。
- 流处理:使用流处理减少内存占用,避免一次性加载整个文件。
以上是ASP.NET Core中实现文件上传与下载的完整步骤和关键实践,适用于Web应用开发。
17.36KB
文件大小:
评论区