ASP.NET Core 文件上传与下载实例
在 ASP.NET Core 中,可以使用多种方式实现文件上传和下载。本攻略将详细介绍如何在 ASP.NET Core 中实现文件上传和下载,并提供多种上传方式的示例。
文件上传
单文件上传
在 ASP.NET Core 中,可以使用 IFormFile 接口实现单文件上传。以下是一个简单的单文件上传示例:
[HttpPost]
public async Task<IActionResult> Upload(IFormFile file)
{
if (file == null || file.Length == 0)
{
return BadRequest("No file selected.");
}
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", file.FileName);
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
return Ok();
}
以上代码中,Upload 方法接受一个 IFormFile 对象,用于表示上传的文件。如果文件为空或长度为 0,则返回 BadRequest。否则,将文件保存到 wwwroot 目录下,并返回 Ok。
多文件上传
在 ASP.NET Core 中,可以使用 IFormFileCollection 接口实现多文件上传。以下是一个简单的多文件上传示例:
[HttpPost]
public async Task<IActionResult> Upload(IList<IFormFile> files)
{
if (files == null || files.Count == 0)
{
return BadRequest("No files selected.");
}
foreach (var file in files)
{
if (file.Length == 0)
{
continue;
}
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", file.FileName);
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
}
return Ok();
}
以上代码中,Upload 方法接受一个 IList
Base64 文件上传
在 ASP.NET Core 中,可以使用 Base64 编码实现文件上传。以下是一个简单的 Base64 文件上传示例:
[HttpPost]
public async Task<IActionResult> Upload(string base64String, string fileName)
{
if (string.IsNullOrEmpty(base64String))
{
return BadRequest("No file selected.");
}
var bytes = Convert.FromBase64String(base64String);
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", fileName);
using (var stream = new FileStream(filePath, FileMode.Create))
{
await stream.WriteAsync(bytes, 0, bytes.Length);
}
return Ok();
}
以上代码中,Upload 方法接受一个 base64String 字符串和一个 fileName 字符串,用于表示上传的文件内容和文件名。如果文件内容为空,则返回 BadRequest。否则,将文件保存到 wwwroot 目录下,并返回 Ok。
文件下载
单文件下载
在 ASP.NET Core 中,可以使用 FileResult 类实现单文件下载。以下是一个简单的单文件下载示例:
[HttpGet]
public IActionResult Download(string fileName)
{
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", fileName);
if (!System.IO.File.Exists(filePath))
{
return NotFound();
}
var fileStream = new FileStream(filePath, FileMode.Open);
return File(fileStream, "application/octet-stream", fileName);
}
以上代码中,Download 方法接受一个 fileName 字符串,用于表示要下载的文件名。如果文件不存在,则返回 NotFound。否则,将文件流返回给客户端,并设置 Content-Type 为 application/octet-stream。
多文件下载
在 ASP.NET Core 中,可以使用 ZipArchive 类实现多文件下载。以下是一个简单的多文件下载示例:
[HttpGet]
public IActionResult Download(IList<string> fileNames)
{
var memoryStream = new MemoryStream();
using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
{
foreach (var fileName in fileNames)
{
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", fileName);
if (!System.IO.File.Exists(filePath))
{
continue;
}
var entryName = Path.GetFileName(fileName);
var entry = archive.CreateEntry(entryName);
using (var entryStream = entry.Open())
using (var fileStream = new FileStream(filePath, FileMode.Open))
{
await fileStream.CopyToAsync(entryStream);
}
}
}
memoryStream.Seek(0, SeekOrigin.Begin);
return File(memoryStream, "application/octet-stream", "files.zip");
}
以上代码中,Download 方法接受一个 IList
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ASP.NET Core文件上传与下载实例(多种上传方式) - Python技术站