ASP.NET 8 MVC 和 MinIO 实现建立一个可以访问的数据库,包括上传和下载历史照片和视频。
1、Minio 服务器下载和安装
要在本地安装和运行 MinIO 服务器,你可以按照以下步骤进行操作:
1. 访问 MinIO 的官方网站:https://min.io/,然后点击页面上的”Download”按钮。
2. 在下载页面上,选择适合你操作系统的 MinIO 服务器版本进行下载。MinIO 服务器支持Windows、Linux 和 MacOS 等操作系统。
3. 下载完成后,解压缩下载的文件。在 Windows
上,你可以使用压缩软件(如 WinRAR 或 7-Zip)进行解压缩。在 Linux 和 MacOS 上,你可以使用命令行工具进行解压缩。
4. 打开解压缩后的文件夹,你会看到一个名为”minio”(或”minio.exe”)的可执行文件。
5. 在命令行中,进入到 MinIO 服务器所在的文件夹。
6. 运行以下命令来启动 MinIO 服务器:
–在 Windows 上:
minio.exe server <path_to_data_director
y>
–在 Linux 和 MacOS 上:
./minio server
MinIO 服务器数据存储的文件夹路径。如果指定的文件夹不存在,MinIO 服务器会自动创建它。
7. 当 MinIO 服务器成功启动后,你会在命令行中看
到类似以下的输出:
Endpoint: http://127.0.0.1:9000 http://192. 168.1.100:9000
AccessKey:
SecretKey:
... 这些信息包括MinIO服务器的访问地址(Endpoint)、
访问密钥(AccessKey)和密钥(SecretKey)。请记下这些信息,你将在代码中使用它们来连接和操作MinIO 服务器。
1. 现在,你可以使用代码来连接和操作 MinIO 服务器,如前面提供的示例代码所示。
请注意,这只是一个本地安装和运行 MinIO 服务器的简单示例。在实际应用中,你可能需要进行更多的配置和安全性设置。你可以参考 MinIO 的官方文档
https://docs.min.io/
2、历史照片和视频上传和下载
以下是一个使用ASP.NET 8 MVC和MinIO实现的完整示例,用于建立一个可以访问的数据库,包括上传和下载历史照片和视频。
首先,你需要安装 MinIO NuGet 包。在 Visual Studio
中,右键点击项目,选择”管理 NuGet 程序包”,然后搜索并安装”Minio”。
接下来,你需要在 MinIO 服务器上创建一个存储桶
(Bucket)。你可以使用 MinIO 的 Web 管理界面或者 MinIO 的命令行工具来创建存储桶。
以下是一个使用ASP.NET 8 MVC和MinIO实现的示
例代码:
Startup.cs:
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjectio
n;
using Microsoft.Extensions.Hosting;
using Minio;
namespace MinioDemo
{
public class Startup
{
public Startup(IConfiguration configur
ation)
{
Configuration = configuration;
}
public IConfiguration Configuration {
get; }
public void ConfigureServices(IService
Collection services)
{
services.AddControllersWithViews();
// 注册 MinIO 客户端
services.AddSingleton<MinioClien
t>(sp =>
{
string endpoint = Configurati
on["Minio:Endpoint"];
string accessKey = Configurat
ion["Minio:AccessKey"];
string secretKey = Configurati
on["Minio:SecretKey"];
bool useSSL = false;
return new MinioClient(endp
oint, accessKey, secretKey, useSSL);
});
}
public void Configure(IApplicationBuil
der app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPa
ge();
}
else
{
app.UseExceptionHandler("/Ho
me/Error");
app.UseHsts();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute
(
name: "default",
pattern: "{controller=Hom
e}/{action=Index}/{id?}");
});
}
}
}
HomeController.cs:
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Minio;
namespace MinioDemo.Controllers
{
public class HomeController : Controller
{
private readonly MinioClient _minioC
lient;
private readonly IWebHostEnvironme
nt _environment;
public HomeController(MinioClient mi
nioClient, IWebHostEnvironment environment)
{ _minioClient = minioClient; _environment = environment;
}
public IActionResult Index()
{
return View();
}
[HttpPost]
public async Task
oad(IFormFile file)
{
try
{
// 存储桶名称
string bucketName = "your_b
ucket_name";
// 生成唯一的对象名称
string objectName = Guid.Ne
wGuid().ToString() + Path.GetExtension(file.File
Name);
// 上传文件到 MinIO 服务器
await _minioClient.PutObjectA
sync(bucketName, objectName, file.OpenRead
Stream(), file.Length);
ViewBag.Message = "文件上传
成功";
}
catch (Exception ex)
{
ViewBag.Message = $"文件上
传失败: {ex.Message}";
}
return View("Index");
}
public async Task
wnload(string objectName)
{
try
{
// 存储桶名称
string bucketName = "your_b
ucket_name";
// 生成下载文件的保存路径
string downloadPath = Path.C
ombine(_environment.WebRootPath, "downloa
ds", objectName);
// 下载文件到指定路径
await _minioClient.GetObjectA
sync(bucketName, objectName,
(stream) =>
{
using (var fileStream
=new FileStream(downloadPath, FileMode.Cr
eate))
{
stream.CopyTo(file
Stream);
}
});
ViewBag.Message = $"文件下
载成功,保存路径为 {downloadPath}";
}
catch (Exception ex)
{
ViewBag.Message = $"文件下
载失败: {ex.Message}";
}
return View("Index");
}
}
}
Index.cshtml:
@{
ViewData["Title"] = "MinIO Demo";
}
MinIO Demo
@if (!string.IsNullOrEmpty(ViewBag.Message))
{
Bag.Message
}
历史文件下载
@foreach (var objectName in Model)
{
<a href="@Url.Action("Download", n
ew { objectName })">@objectName
}
在上述示例中,
你需要将 your_bucket_name 替换为你自己的存储桶名称。
在Upload 方法中,我们使用 PutObjectAsync 方法将上传的文件保存到 MinIO 服务器。
在 Download 方法中,我们使用 GetObjectAsync方法从 MinIO 服务器下载文件,并保存到指定的路径。请注意,这只是一个简单的示例,实际应用中可能需要更复杂的错误处理和参数验证。你可以根据自己的需求进行修改和扩展。另外,你还需要在 appsettings.json 文件中添加
MinIO 服务器的访问信息:
{ "Minio": { "Endpoint": "your_minio_endpoint", "AccessKey": "your_access_key","SecretKey": "your_secret_key"
}
}
在上述代码中,你需要将 your_minio_endpoint、
your_access_key 和 your_secret_key 替换为你自己的 MinIO 服务器的访问信息。
希望这个示例能帮助到你建立一个可以访问的数据库。如果你有任何问题,请随时提问。