Введение Во многих случаях нам необходимо сохранять изображения в базу данных. В некоторых приложениях имеется некоторая конфиденциальная информация, которую нельзя хранить в файловой системе, поскольку любые изображения, хранящиеся в файловой системе, могут быть легко получены пользователем незаконным путем.
В этой статье будет обсуждаться, как сохранять изображения в базе данных SQL SERVER в ASP.NET.
В этой статье мы узнаем о следующих аспектах:
l Требования к загрузке файлов изображений
l Использование объектов Strem
l Получить размер и тип загруженного изображения
l Как использовать метод InputStream?
Требования к загрузке файлов изображений. Прежде чем начать загрузку, нам нужно сделать две важные вещи.
Атрибут enctype тега #Form должен иметь следующую форму:
enctype="multipart/form-data"
#Предоставьте HTML-элемент управления, позволяющий пользователям выбирать файлы изображений:
<тип ввода=файл>
#Также ссылайтесь на пространство имен System.IO для обработки объектов Strem. Вышеупомянутые три элемента должны применяться к страницам aspx. В SQL SERVER также есть следующие требования:
#Таблица хотя бы с одним типом поля «Изображение»
#Кроме того, было бы лучше использовать поле типа Varchar для хранения типов изображений. Затем у нас есть таблица данных с типом поля изображения и <input type=file> (элемент управления файлом HTML). Нам также нужна кнопка отправки, которую пользователь может нажать после выбора изображения. В событии OnClick кнопки нам нужно получить содержимое файла изображения и, наконец, вставить его в таблицу данных. Давайте посмотрим на событие OnClick кнопки, которое считывает изображение и вставляет его в таблицу данных.
Код события OnClick кнопки отправки
http://blog.downcodes.com/
Dim intImageSize как Int64
Dim strImageType как строка
Dim ImageStream As Stream
'Получает размер изображения
intImageSize = PersonImage.PostedFile.ContentLength
' Получает тип изображения
strImageType = PersonImage.PostedFile.ContentType
' Считывает изображение
ImageStream = PersonImage.PostedFile.InputStream
Dim ImageContent(intImageSize) Как байт
Dim intStatus как целое число
intStatus = ImageStream.Read(ImageContent, 0, intImageSize)
'Создание экземпляра соединения и объекта команды
Уменьшить myConnection как новый SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
Dim myCommand As New SqlCommand("sp_person_isp", myConnection)
' Отмечаем команду как SPROC
myCommand.CommandType = CommandType.StoredProcedure
'Добавить параметры в SPROC
Dim prmPersonImage как новый SqlParameter("@PersonImage", SqlDbType.Image)
prmPersonImage.Value = Содержимое изображения
myCommand.Parameters.Add(prmPersonImage)
Dim prmPersonImageType As New SqlParameter("@PersonImageType", SqlDbType.VarChar, 255)
PrmPersonImageType.Value = strImageType
myCommand.Parameters.Add(prmPersonImageType)
Попробуйте
моеСоединение.Открыть()
мояКоманда.ExecuteNonQuery()
моеСоединение.Закрыть()
Response.Write("Новый человек успешно добавлен!")
Перехват SQLexc как SqlException
Response.Write("Ошибка вставки. Подробности об ошибке: " & SQLexc.ToString())
Конец попытки
Как это работает?
Объект PersonImage является элементом управления HTMLInputFile. Сначала нам нужно получить размер вставляемого изображения, что достигается следующим методом:
intImageSize = PersonImage.PostedFile.ContentLength
Далее вам нужно получить тип изображения через свойство ContentType. Последнее и самое важное — получить поток файла изображения, что достигается следующими методами:
ImageStream = PersonImage.PostedFile.InputStream
У нас есть массив байтов ImageContent, который готов к использованию для сохранения содержимого изображения. Все изображение считывается с помощью метода Read объекта Stream. Этот метод имеет три параметра, а именно:
#Целевое расположение скопированного содержимого изображения
#Начальная позиция чтения
#Подраздел, который необходимо прочитать, объявляется следующим образом:
intStatus = ImageStream.Read(ImageContent, 0, intImageSize)
Теперь мы читаем все содержимое изображения. Далее нам нужно вставить содержимое изображения в таблицу данных SQL. Мы будем использовать хранимую процедуру для вставки типа изображения и изображения в таблицу данных SQL. Если вы видели приведенный выше листинг кода, вы знаете, что мы установили тип данных SqlDbType.Image. Таким образом, мы успешно сохранили изображение в базе данных SQL SERVER.