Как сделать файлы FileStream доступными для веб-приложения - PullRequest
2 голосов
/ 01 мая 2019

Я пытался найти лучший способ сделать файлы, хранящиеся на БД Sql Server, как FILESTREAM доступными для веб-приложения.

По сути, у меня есть веб-приложение, написанное с использованием Vue, ASP.NET CORE WebApi поддерживает его, и когда пользователь загружает изображение (которое хранится в БД как varbinary(max) FILESTREAM), пользователь должен иметь возможность просматривать изображение в браузере.

Я хочуиспользуйте <img src="{url to image}"/>

Итак, вопрос в том, как мне получить {url to image} для тега img из записи в БД.И мне это нужно для 1. Работать на нескольких серверах, поэтому, если веб-приложение и БД находятся на разных серверах.и 2. мне нужно, чтобы URL был псевдонимом, чтобы не выдавать структуру папок, в которой хранятся файлы.

Я также открыт для любых предложений о том, как по-другому обращаться с хранилищем файлов, если это необходимо.

Спасибо.

1 Ответ

2 голосов
/ 01 мая 2019

Если это маленькое изображение (до 5 КБ), вы можете использовать Base64-кодирование необработанных данных во встроенный data: URI для изображения.

В противном случае вам нужно написатьновое действие контроллера, которое обслуживает только данные изображения.Не забудьте установить правильный тип контента тоже.Передайте ключ записи в качестве параметра URI.

[Route("/record-images/{recordPrimaryKey}")]
public async Task<IActionResult> GetImage( Int32 recordPrimaryKey )
{
    using( SqlConnection c = ... )
    using( SqlCommand cmd = c.CreateCommand() )
    {
        cmd.CommandText = "SELECT ..."; // I assume the raw file data is returned through `SqlDataReader`. I assume that FILESTREAM is just a back-end storage concern.
        using( SqlDataReader rdr = await cmd.ExecuteReaderAsync() )
        {
            if( !rdr.Read() ) return this.NotFound();

            Byte[] imageData = rdr.GetBytes( 0 );
            String contentType = rdr.GetString( 1 );
            return this.File( imageData, contentType );
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...