C# 从字节[]返回FileResult

C# 从字节[]返回FileResult,c#,asp.net-core,C#,Asp.net Core,我正在开发ASP.NET核心API。API是数据库驱动的 我正在数据库中存储图像,我的ArtistImage.cs实体如下所示: ArtistImage.cs 如何将字节[]转换为如下内容:return File~/Images/photo.jpg,image/jpeg;这对形象有什么好处 我希望避免先将字节数组写入本地系统文件 我试过的 我已经尝试了下面的方法,但显然,我不能使用这样的文件 public class ImagesService : IImagesService { p

我正在开发ASP.NET核心API。API是数据库驱动的

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

ArtistImage.cs

如何将字节[]转换为如下内容:return File~/Images/photo.jpg,image/jpeg;这对形象有什么好处

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

我试过的

我已经尝试了下面的方法,但显然,我不能使用这样的文件

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");
    }
}

你可以用这样的东西

return new FileStreamResult(new MemoryStream(MyArtistImage.Data ...
字节[]数据可能包含图像本身,而不是图像文件的路径。否则,数据将只是一个字符串。可以使用将其转换为图像对象

Image image;
using (var ms = new MemoryStream(imageBytes))
{
    image = Image.FromStream(ms);
}
这似乎是一个错误。您正在混合控制器助手方法,并试图从一个不相关的服务访问它们

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

图像服务

然后让控制器返回FileResult

控制器


也许您的方法返回了任务?我想您可能误解了OP相关的上下文。文件在这里似乎是一个方法,而不是System.IO命名空间中的静态类。它来自哪里?@OlivierJacot Descombes check@OlivierJacot Descombes文件在本例中是ControllerBase上的一个方法。很高兴知道。现在还不清楚,因为OP正在ImageService类中使用它:IImageService,它不是从ControllerBase派生的,而且他引用了System.IO.File。但这可能是他的问题的一部分。@OlivierJacot Descombes,这就是问题产生的地方。他们试图从服务调用控制器方法。
Image image;
using (var ms = new MemoryStream(imageBytes))
{
    image = Image.FromStream(ms);
}
public Task<byte[]> GetArtistImageAsync(int imageId) {
    return context.ArtistImages
            .Where(ai => ai.Id == imageId)
            .Select(ai => ai.Data)
            .SingleOrDefaultAsync();
}
public async Task<IActionResult> SomeAction(....) {
    //...

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