С Новым годом! Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET Core
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 23.08.2017
Сообщений: 71

Не получается преобразовать типы при выводе изображений из БД

01.06.2019, 01:56. Показов 2478. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Два дн просидел над проблемой. Никак не могу понять, как все таки преобразовать байтовый массив в изображение при выводе. Выдает ошибку.
не удается преобразовать из "string" в "System.ReadOnlySpan<byte>".
Вот контроллер
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//выгружаем фото из БД
        public static void ReadFileFromDatabase() {
            //    #region не работает но и ошибок нет
            string connectionString = @"data source=(localdb)\MSSQLLocalDB;initial catalog=OpafotoDB;integrated security=True;
            MultipleActiveResultSets=True;App=EntityFramework";
            List<Image> images = new List<Image>();
            using (SqlConnection connection = new SqlConnection(connectionString)) {
                connection.Open();
                string sql = "SELECT * FROM Images";
                SqlCommand command = new SqlCommand(sql, connection);
                SqlDataReader reader = command.ExecuteReader();
                while (reader.Read()) {
                    int id = reader.GetInt32(0);
                    string filename = reader.GetString(1);
                    string title = reader.GetString(2);
                    byte[] data = (byte[])reader.GetValue(3);
 
                    Image image = new Image(id, filename, title, data);
                    images.Add(image);
                }
            }
            //сохраним первый файл из списка
            //images[0].Data выводить на фронт
            if (images.Count > 0) {
                using (FileStream fs = new FileStream(images[0].FileName, FileMode.OpenOrCreate)) {
                    fs.Write(images[0].Data, 0, images[0].Data.Length);
                    res = images[0].Data;
}
Так пытаюсь получить во вью
C#
1
2
3
4
5
@model List<string>
@*<h3>В списке @Model.Count элемента</h3>*@
@foreach (var country in Model) {
    <img src="data:image;base64,@System.Convert.ToBase64String(country)" />
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.06.2019, 01:56
Ответы с готовыми решениями:

Не получается преобразовать типы
double inputs = new double; for (int i = 0; i &lt; dimensions; i++) { string k=line; ...

Не получается преобразовать типы указателей на функцию
Доброго всем времени суток. Подскажите пожалуйста как сделать есть тип указателя на функцию. typedef void (*pfn_RawMouseOnLeftDown ...

Преобразовать месяц словом при выводе из БД
Привет ребята! Прошу вашей помощи. Нужно вывести из БД и преобразовать месяц из числа в слово такого типа: 8 января. Говорю сразу, PHP...

2
.NET senior
 Аватар для bax_tang
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
14.06.2019, 19:07
Sierra, зачем же так жестоко-то вручную через ADO.NET в базу лезть, тем более в .NET Core (у Вас вообще Core приложение?)? Есть же Entity Framework или linq2db, например.

Кроме того, лучше будет не выкидывать сырые байты изображения во вьюху, а покрасивее это сделать - формировать url, по которому API сможет отдать изображение на фронт. Так Вы улучшите отзывчивость сайта и ускорите загрузку страниц, плюс функционал будет разделён на отдельные компоненты, а не свален в одну общую кучу.

P.S.: Зачем ещё дополнительно сохранять изображение из базы на диск - совершенно непонятно. Разве что того требует задание, но в таком случае лучше реализовать резервное копирование с помощью фоновых задач. Нужны Ваши комментарии.
0
0 / 0 / 0
Регистрация: 23.08.2017
Сообщений: 71
14.06.2019, 20:34  [ТС]
Решил проблему с изображениями по совету одного доброго разработчика. Выложу сюда код, вдруг кому пригодится чтоб не теряли много времени на эту задачу как потерял я неделю.
Изображения храню в папке проекта, а в БД храню путь к изображениям, затем вывожу по этому пути во вью. Записываю изображения в модель.
Вот бэкэнд:
Моя модель
C#
1
2
3
4
5
6
//модель данных, которую связываем с таблицей в БД
    public class FileModel {
        public int Id { get; set; }
        public string Title { get; set; } 
        public string Path { get; set; }
    }
Контроллер
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
public class FileUploadController : Controller {
        string connectionString = @"data source=(localdb)\MSSQLLocalDB;initial catalog=OpafotoDB;integrated security=True;
                MultipleActiveResultSets=True;App=EntityFramework";
        public IActionResult Index() {
            //вывод данных из БД в указанную вью
            var model = FetchImageFromDB();
            return View(model);
        }
        //определение пути загружаемых файлов
        [HttpPost]
        public async Task<IActionResult> UploadImage(IFormCollection form, string user_title) {
            string storePath = "wwwroot/ImagesForPortfolio/";   //путь к папке с изображениями
            if (form.Files == null || form.Files[0].Length == 0)    
                return RedirectToAction("Index");
            //полный локальный путь к файлу включая папку проекта wwwroot
            var path = Path.Combine(
                        Directory.GetCurrentDirectory(), storePath,
                        form.Files[0].FileName);
            using (var stream = new FileStream(path, FileMode.Create)) {
                await form.Files[0].CopyToAsync(stream);
            }
            StoreInDB(storePath + form.Files[0].FileName, user_title);
            return RedirectToAction("Index");
        }
        //запись данных в БД
        public void StoreInDB(string path, string user_title) {
            using (var con = new SqlConnection(connectionString)) {
                con.Open();
                //запись изображения в БД
                using (var com = new SqlCommand("INSERT INTO Images(TITLE, ImagePath) VALUES('" + user_title + "', '" + path + "')", con)) {
                    try {
                        com.ExecuteNonQuery();
                    }
                    catch (Exception ex) {
                        throw;
                    }
                }
            }
        }
        //отображение данных из БД
        public List<FileModel> FetchImageFromDB() { 
            List<FileModel> imagePath = new List<FileModel>();  //создаем коллекцию на основе полей модели
            using (var con = new SqlConnection(connectionString)) {
                con.Open();
                using (var com = new SqlCommand("SELECT TITLE, ImagePath FROM Images", con)) {
                    using (var reader = com.ExecuteReader()) {
                        if (reader.HasRows) {
                            while (reader.Read()) {
                                imagePath.Add(new FileModel {
                                    Title = reader["TITLE"].ToString(),
                                    Path = reader["ImagePath"].ToString()
                                });
                            }
                        }
                    }
                }
            }
            return imagePath;
        }
    }
Моя вью
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@* выводим изображения *@
<div class="wrapper">
    <div class="container">
        <div class="row">
            @model IEnumerable<Opafoto.Models.FileModel>
            @foreach (var item in Model) {
                <div class="photoBlock">
                    <img id="imgPortfolio" src="@Url.Content(item.Path.Replace("wwwroot","~"))" /> <br />
                    <p id="idTitle" class="text-center"> @item.Title </p>
                </div>
            }
        </div>
    </div>
</div>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.06.2019, 20:34
Помогаю со студенческими работами здесь

Возникают ошибки при формировании растровых изображений, и неправильно приводятся типы
Здравствуйте! Есть программа, разработанная в Linux. В программе используются Qt, alglib, tinyxml. Изначально, программа...

При выводе получается какая-то ересь в матрице
Дано задание: написать программу,транспонирующую матрицу, используя указатели и единицы трансляции, программа написана, но итогом является...

Не получается осуществить ссылки при выводе категорий
Проблема такова нужно осуществить вывод категорий в виде ссылок по примеру этого скриншота меня получилось сделать просто вывод категорий...

Преобразовать типы данных при считывании с ini файла
Считываю значение с ini файла и присваиваю переменной TestFile:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'Settings.ini'); ...

Как преобразовать типы Дата/Время при загрузке данных из БД
Здравствуйте! Ситуация следующая: Есть база Access со столбцом &quot;Срок_до&quot; формат текстовый. Пишу запрос: question = &quot;SELECT...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru