gpt4 book ai didi

c# - 从 byte[] 返回一个 FileResult

转载 作者:行者123 更新时间:2023-12-05 08:31:43 26 4
gpt4 key购买 nike

我正在研究 ASP.NET Core API。 API 是数据库驱动的。

我将图像存储在数据库中,我的 ArtistImage.cs 实体如下所示:

ArtistImage.cs

public class ArtistImage
{
public int Id { get; set; }

public byte[] Data { get; set; }

public DateTime CreatedAt { get; set; }

public DateTime? ModifiedAt { get; set; }

public int ArtistId { get; set; }

public Artist Artist { get; set; }
}

我如何将 byte[] 转换为类似的内容:return File("~/Images/photo.jpg", "image/jpeg"); where那只会服务于图像?

我想避免先将字节数组写入本地系统文件。

我尝试过的

我试过下面的方法,但显然,我不能那样使用File

public class ImagesService : IImagesService 
{
private readonly DbContext context;

public ImagesService(DbContext context)
{
this.context = context;
}

public async Task<FileResult> GetArtistImageAsync(int imageId)
{
byte[] imageBytes = await context
.ArtistImages
.Where(ai => ai.Id == imageId)
.Select(ai => ai.Data)
.SingleOrDefaultAsync();

return System.IO.File(imageBytes, "image/jpg", "test");
}
}

what I have tried

最佳答案

这似乎是一个 XY problem .您正在混淆 Controller 辅助方法并尝试从不相关的服务访问它们。

我建议您重构服务以返回字节数组

图片服务

public Task<byte[]> GetArtistImageAsync(int imageId) {
return context.ArtistImages
.Where(ai => ai.Id == imageId)
.Select(ai => ai.Data)
.SingleOrDefaultAsync();
}

然后让 Controller 返回 FileResult

Controller

public async Task<IActionResult> SomeAction(....) {
//...

var bytes = await imagesService.GetArtistImageAsync(imageId);
return File(bytes, "image/jpeg");
}

关于c# - 从 byte[] 返回一个 FileResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56093166/

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