首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从FileResult返回byte[]

从FileResult返回byte[]
EN

Stack Overflow用户
提问于 2019-05-11 18:27:54
回答 3查看 7.9K关注 0票数 2

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

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

ArtistImage.cs

代码语言:javascript
复制
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");,这只会为图像提供服务?

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

我已经尝试过的

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

代码语言:javascript
复制
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");
    }
}

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-11 18:48:46

这似乎是一个XY problem。您正在混合控制器助手方法,并试图从不相关的服务中访问它们。

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

ImagesService

代码语言:javascript
复制
public Task<byte[]> GetArtistImageAsync(int imageId) {
    return context.ArtistImages
            .Where(ai => ai.Id == imageId)
            .Select(ai => ai.Data)
            .SingleOrDefaultAsync();
}

然后让控制器返回FileResult

控制器

代码语言:javascript
复制
public async Task<IActionResult> SomeAction(....) {
    //...

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

Stack Overflow用户

发布于 2019-05-11 18:43:45

byte[]数据可能包含图像本身,而不是图像文件的路径。否则,Data将只是一个字符串。可以将其转换为Image对象。

代码语言:javascript
复制
Image image;
using (var ms = new MemoryStream(imageBytes))
{
    image = Image.FromStream(ms);
}
票数 3
EN

Stack Overflow用户

发布于 2019-05-11 18:34:46

你可以用这样的方法

代码语言:javascript
复制
return new FileStreamResult(new MemoryStream(MyArtistImage.Data ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56093166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档