gpt4 book ai didi

c# - Asp.Net Core 2.0 - 检索图像 Url

转载 作者:太空狗 更新时间:2023-10-29 17:51:30 25 4
gpt4 key购买 nike

我正在尝试创建一个公开一些数据的 Restful 服务,一切都很好,直到我意识到从服务器公开图像的完整 URL 很痛苦。也许只有我一个人,但我发现它非常复杂。

只是在上下文中,我正在使用 Entity Framework 从我的数据库中读取,这是我正在使用的表:

enter image description here

如您所见,有一个名为“ImagePath”的字段,不好的名字,它应该是“ImageName”,不管怎样,该列保存了代表冠军对象的图像的确切文件名,所有图像当前位于 wwwroot 项目文件夹中,就像这样:

enter image description here

所有业务逻辑都不在 Controller 中,而是在常规类中的服务文件夹/层中(也许这不相关,但我只是想澄清一下,我不在任何 Controller 中工作):

enter image description here

这是我期待魔法发生的方法:

public async Task<IList<Champion>> GetChampions()
{
List<Champion> champions = await _context.Champion
.Include(x => x.PrimaryClass)
.Include(x => x.SecondaryClass)
.Include(x => x.ChampionUserRate)
.ToListAsync();

//BEFORE RETURNING THE CHAMPION TO THE CONTROLLER, I WILL NEED TO CONCATENATE MY CURRENT SERVER URL AND THE PATH TO THE IMAGE PLUS THE IMAGE NAME FILE WHICH IS ALREADY IN THE DATABASE AND ALREADY MATCHES THE IMAGES FOLDER

string serverPathToChampionsFolder = null; //Example: http://localhost:57435/wwwroot/Champions

foreach (var champion in champions)
{
champion.ImagePath = serverPathToChampionsFolder + champion.ImagePath;
}

return champions;
}

在这里要清楚一点,这里的关键行是:

 string serverPathToChampionsFolder = null; //Example: http://localhost:57435/wwwroot/Champions

我需要以某种方式获取当前 URL,就像在示例中一样,将其添加到每个冠军,以便客户端可以在图像标签中使用它。

如果无法通过我尝试实现的方法做到这一点,我将接受任何其他建议,这里的重点是暴露图像 URL,无论如何。

最佳答案

基本上,您需要使用 IHostingEnvironment 并将其注入(inject)到您的服务构造函数中。然后在 wwwroot 中用你的文件夹名称创建一个字符串变量让我们说 "Champions"

示例代码如下:

private readonly IHostingEnvironment hostingEnv;

private const string ChampionsImageFolder = "Champions";

public ChampionsService(IHostingEnvironment hostingEnv){
this.hostingEnv = hostingEnv;
}

// Suppose this method is responsible for fetching image path
public string GetImage(){
var path = Path.Combine(hostingEnv.WebRootPath, ChampionsImageFolder);

return path;
}

IHostingEnvironment 接口(interface)的作用是“提供有关运行应用程序的宿主环境的信息”。

如果你想获取给定路径内的文件,这会给你一个提示。

var directoryFiles = Directory.GetFiles("wwwroot/Champions");

foreach (var item in directoryFiles)
{
// do something here
}

如果你想从那些 wwwroot 文件夹创建路径链接,你需要在启动时注册 UseDirectoryBrowser

在您的 Startup.cs 文件中,找到 Configure 方法插入此代码片段

这些代码片段将公开 Champions 目录中的文件,并在您的网站上创建一个新路径,该路径是从文件夹 Champions 派生的 ChampionImages你的 wwwroot

app.UseDirectoryBrowser(new DirectoryBrowserOptions()
{
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot", "Champions")),
RequestPath = new PathString("/ChampionImages")
});

然后您现在可以使用类似 localhost:8080/ChampionImages 的内容,您可以在其中查看存储在 wwwroot 的 Champions 文件夹中的每个文件。您可以像这样创建该图像的 URL。

var imageUrl = $"/ChampionImages/{exactFileName}"; // this will create a string link.

我希望这个简单的代码片段能给你帮助或想法:)

关于c# - Asp.Net Core 2.0 - 检索图像 Url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50461175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com