从零讲解.Net Core开发实现图片文件上传下载

.Net Core是一个非常流行的开发平台,它的灵活性和可扩展性使它成为绝佳的开发工具。本文将详细讲解如何使用.Net Core实现图片文件上传和下载的功能。

1. 搭建.Net Core环境

首先,我们需要安装.Net Core的环境。在这里我们使用Visual Studio 2019,具体步骤如下:

1. 下载安装最新的Visual Studio 2019版本。

2. 打开Visual Studio 2019并创建一个新的.Net Core Web应用程序。

2. 图片文件上传

在这一部分,我们将详细讲解如何使用.Net Core实现图片文件上传的功能。

2.1. 创建上传表单

我们需要先创建一个包含文件上传功能的表单,这个表单将用于上传图片文件。以下是用于上传文件的表单代码:

<form method="post" enctype="multipart/form-data">

<input type="file" name="file" />

<input type="submit" value="Upload" />

</form>

在这个表单中,我们使用了<input type="file">来选择上传的文件,使用enctype="multipart/form-data"来指定表单的MIME类型。

2.2. 实现文件上传

上传表单完成后,我们需要实现文件上传的功能。接下来,我们将在.Net Core中实现这个功能。

首先,我们需要创建一个控制器,这个控制器将包含上传文件的操作。以下是上传控制器的代码:

public class UploadController : Controller

{

[HttpPost("Upload")]

public async Task<IActionResult> UploadFile()

{

var file = Request.Form.Files[0];

var folderName = Path.Combine("Resources", "Images");

var path = Path.Combine(Directory.GetCurrentDirectory(), folderName);

if (file.Length > 0)

{

var fileName = Guid.NewGuid().ToString().Replace("-", "") + Path.GetExtension(file.FileName);

var fullPath = Path.Combine(path, fileName);

using (var stream = new FileStream(fullPath, FileMode.Create))

{

await file.CopyToAsync(stream);

}

return Ok(new { fileName });

}

else

{

return BadRequest();

}

}

}

在这个控制器中,我们创建了一个HttpPost方法,它将会处理上传文件的请求。我们首先检查我们是否收到了一个文件,如果没有则返回BadRequest。如果有文件,我们使用Guid生成一个新的文件名,然后将文件保存到服务器上的特定文件夹中。如果保存成功,我们将文件名返回给客户端。

2.3. 测试文件上传

现在我们已经完成了上传文件的代码,我们可以使用Postman或浏览器来测试上传功能是否正确。以下是测试上传的代码:

<form method="post" enctype="multipart/form-data" action="https://localhost:5001/api/Upload">

<input type="file" name="file" />

<input type="submit" value="Upload" />

</form>

我们将文件上传到名为Resources/Images的文件夹中。在实际应用中,我们需要将文件保存到指定的文件夹(例如,应将其保存到远程服务器上)。

3. 图片文件下载

在这一部分,我们将详细讲解如何使用.Net Core实现图片文件下载的功能。

3.1. 创建下载控制器

首先,我们需要创建一个控制器来处理下载请求。以下是下载控制器的代码:

public class DownloadController : Controller

{

private readonly IWebHostEnvironment _hostingEnvironment;

public DownloadController(IWebHostEnvironment hostingEnvironment)

{

_hostingEnvironment = hostingEnvironment;

}

[HttpGet("Download/{fileName}")]

public async Task<IActionResult> DownloadFile(string fileName)

{

if (fileName == null)

return Content("fileName not present");

var path = Path.Combine(_hostingEnvironment.ContentRootPath, "Resources", "Images", fileName);

var memory = new MemoryStream();

using (var stream = new FileStream(path, FileMode.Open))

{

await stream.CopyToAsync(memory);

}

memory.Position = 0;

return File(memory, GetContentType(path), Path.GetFileName(path));

}

private string GetContentType(string path)

{

var types = GetMimeTypes();

var ext = Path.GetExtension(path).ToLowerInvariant();

return types[ext];

}

private Dictionary<string, string> GetMimeTypes()

{

return new Dictionary<string, string>

{

{".jpg", "image/jpeg"},

{".jpeg", "image/jpeg"},

{".png", "image/png"},

};

}

}

在这个控制器中,我们创建了一个HttpGet方法,它将会处理下载文件的请求。我们首先检查我们是否收到了一个文件名,如果没有,则返回Content("fileName not present")。如果有文件名,我们将文件名与服务器上的文件路径组合。然后,我们将文件读入到内存流中,并返回文件的内容类型和文件名。

3.2. 测试文件下载

现在我们已经完成了下载文件的代码,我们可以使用浏览器来测试下载功能是否正确。以下是测试下载的代码:

<img src="https://localhost:5001/api/Download/YourFileNameHere.jpg" alt="Your Image">

我们将文件下载到名为Resources/Images的文件夹中。在实际应用中,我们需要将文件从指定的文件夹下载(例如,应从远程服务器下载)。

总结

在本文中,我们详细讲解了如何使用.Net Core实现图片文件上传和下载的功能。我们首先创建了一个包含文件上传的表单,然后在控制器中实现了文件上传和文件下载的操作。最后,我们使用浏览器和Postman测试了上传和下载的功能。使用本文的方法,您就可以很容易地实现这些功能,并将它们应用于您的实际项目中。

后端开发标签