Re: картинка в базе
От: Gollum Россия  
Дата: 20.08.03 05:31
Оценка: 3 (1) +1
Здравствуйте, oRover, Вы писали:

R>[думал, в "Базы данных" написать, но подумал, что лучше сюда]


R>Необходимо загружать и хранить картинки на сервере (размер килобайт по 100). Приложение, которое их будет загружать, пишется на ASP.NET. Как порекомендуете хранить эти картинки — как файлы или в отдельном поле в базе. Когда я писал на ASP — последний способ мне не нравился (нужно было загрузить картинку, потом ее в базу записать) и я преимущественно использовал первый. Как поступить в данном случае?


Лучше в базу.

R> .НЕТ довольно неплохо дружит с MS SQL, может, есть какой-то облегченный способ ака сказал писать прямо в базу и опа "одной командой" послал картинку в базу без геморройных способов записывания сначала на диск.


Конечно есть. Ставишь форме encType="multipart/form-data"
Кидаешь на нее HTML Input type=file (в тулбоксе HTML — File field)
Называешь его допустим, UploadFile


Protected WithEvents UploadFile As System.Web.UI.HtmlControls.HtmlInputFile

    End Sub

    Private Sub UpdatePhoto()
        Dim imgStream As Stream
        Dim imgLen As Integer
        Dim imgName_value As String
        Dim imgContentType As String
        Dim imgUploadedName As String

        If Not UploadFile Is Nothing Then

            If Not UploadFile.PostedFile Is Nothing Then

                If UploadFile.PostedFile.ContentLength > 0 Then

                    imgStream = UploadFile.PostedFile.InputStream
                    imgLen = UploadFile.PostedFile.ContentLength
                    imgUploadedName = UploadFile.PostedFile.FileName
                    Dim imgBinaryData(imgLen) As Byte
                    imgContentType = UploadFile.PostedFile.ContentType

                    Dim n As Integer = imgStream.Read(imgBinaryData, 0, imgLen)
                                        
                                        ' Теперь у нас есть HTML Content-type для имэджа, и его binary blob.
                                        ' Сохраняем все это в БД

                End If
            End If
        End If

    End Sub
В мире что-то не так? Или это у меня в голове?
Eugene Agafonov on the .NET

Re[4]: картинка в базе
От: mogadanez Чехия  
Дата: 20.08.03 10:36
Оценка: +1
Здравствуйте, Gollum, Вы писали:

G>Здравствуйте, DenizK, Вы писали:


DK>>А чем лучше то? Например, картинок на странице 40 штук (галерея какая-нибудь). Отображаются они через http handler.


G>Тогда показываются, ессно, thumbnails маленького размера.


DK>>Нагрузка на сервер будет выше, если картинки хранить в БД. Конечно имхо если картинок мало и они маленькие то особых проблем не возникнит и при хранении в БД.

DK>>Пробовал оба варианта, но больше понравился с сохранением в базе только путей к графическим файлам. Если я не ошибаюсь (нет под рукой исходника) в проекте community из asp.net starter kits использован тот-же подход.

G>Запросы можно будет кэшировать с помощью инфраструктуры ASP.Net. Если картинки размером около 100Кб, то я думаю этот способ оптимальный. Преимущества хранения в базе, я думаю, описывать не нужно. Однако, действительно, если картинки большие и БД не выдерживает связанных с их хранением загрузок, можно подумать о хранении в виде файлов. Выбор зависит исключительно от специфики задачи.


еще один незанчительный плюс хранения в файлах, по собственному опыту:
это когда приходится часто подправлять картинки, в этом случае их удобнее закачивать массой по ФТП, чем через ВебИнтерфейс в базу.
... << RSDN@Home 1.0 beta 7a >>
картинка в базе
От: oRover Украина  
Дата: 19.08.03 18:58
Оценка:
[думал, в "Базы данных" написать, но подумал, что лучше сюда]

Необходимо загружать и хранить картинки на сервере (размер килобайт по 100). Приложение, которое их будет загружать, пишется на ASP.NET. Как порекомендуете хранить эти картинки — как файлы или в отдельном поле в базе. Когда я писал на ASP — последний способ мне не нравился (нужно было загрузить картинку, потом ее в базу записать) и я преимущественно использовал первый. Как поступить в данном случае? .НЕТ довольно неплохо дружит с MS SQL, может, есть какой-то облегченный способ ака сказал писать прямо в базу и опа "одной командой" послал картинку в базу без геморройных способов записывания сначала на диск.
... << RSDN@Home 1.1 beta 1 >>
Re: картинка в базе
От: Andre Украина  
Дата: 20.08.03 00:27
Оценка:
Здравствуйте, oRover, Вы писали:

R>[думал, в "Базы данных" написать, но подумал, что лучше сюда]


R>Необходимо загружать и хранить картинки на сервере (размер килобайт по 100). Приложение, которое их будет загружать, пишется на ASP.NET. Как порекомендуете хранить эти картинки — как файлы или в отдельном поле в базе.


IMHO отдельно на диске, в базе ссылку на картинку + описание и чего там еще нужно. Я обычно еще и переименовываю файл в какой нить хеш и в базе храню также оригинальное имя, чтобы при "выдаче" пользователю отдать с оригинальным именем.


R>... "одной командой" послал картинку в базу без геморройных способов записывания сначала на диск.


Хм... Я классического ASP не знаю. Но недавно очень попросили помочь с аплоадом файлов в базу, и я сделал без сохранения на диск


    Set rs  =  Server.CreateObject("ADODB.Recordset")
                
    rs.Open "SELECT * FROM SomeTable WHERE 1=0", Conn, adOpenKeyset, adLockOptimistic
    rs.AddNew        

    rs.Fields("FileName").Value = objUpload.Files.Item(0).FileName
    ...
    rs.Fields("FileContent").AppendChunk = objUpload.Files.Item(0).Blob
    rs.Update
    rs.Close


Сначала руками парсил входной поток, файл получал но терялись переменные формы. Самому делать было лень, поэтому нашел для аплоада скрипт какого то чувака. Если будет нужно могу закинуть.
RSDN@Home 1.1 beta 1 :: Lifesavas — Selector (Ft. J-Live)
Я бы изменил мир — но Бог не даёт исходников...
Re[2]: картинка в базе
От: DenizK Россия www.visualdesign.ru/vng
Дата: 20.08.03 10:08
Оценка:
Здравствуйте, Gollum, Вы писали:

G>Лучше в базу.


А чем лучше то? Например, картинок на странице 40 штук (галерея какая-нибудь). Отображаются они через http handler. Нагрузка на сервер будет выше, если картинки хранить в БД. Конечно имхо если картинок мало и они маленькие то особых проблем не возникнит и при хранении в БД.
Пробовал оба варианта, но больше понравился с сохранением в базе только путей к графическим файлам. Если я не ошибаюсь (нет под рукой исходника) в проекте community из asp.net starter kits использован тот-же подход.
Re[3]: картинка в базе
От: Gollum Россия  
Дата: 20.08.03 10:23
Оценка:
Здравствуйте, DenizK, Вы писали:

DK>А чем лучше то? Например, картинок на странице 40 штук (галерея какая-нибудь). Отображаются они через http handler.


Тогда показываются, ессно, thumbnails маленького размера.

DK>Нагрузка на сервер будет выше, если картинки хранить в БД. Конечно имхо если картинок мало и они маленькие то особых проблем не возникнит и при хранении в БД.

DK>Пробовал оба варианта, но больше понравился с сохранением в базе только путей к графическим файлам. Если я не ошибаюсь (нет под рукой исходника) в проекте community из asp.net starter kits использован тот-же подход.

Запросы можно будет кэшировать с помощью инфраструктуры ASP.Net. Если картинки размером около 100Кб, то я думаю этот способ оптимальный. Преимущества хранения в базе, я думаю, описывать не нужно. Однако, действительно, если картинки большие и БД не выдерживает связанных с их хранением загрузок, можно подумать о хранении в виде файлов. Выбор зависит исключительно от специфики задачи.
Любая весть изначально благая, просто ты к этому еще не привык
Eugene Agafonov on the .NET

Re: картинка в базе
От: Pavel Kalyakin http://www.livejournal.com/users/pavelk/
Дата: 22.08.03 07:23
Оценка:
Здравствуйте, oRover, Вы писали:
R>Необходимо загружать и хранить картинки на сервере (размер килобайт по 100). Приложение, которое их будет загружать, пишется на ASP.NET. Как порекомендуете хранить эти картинки — как файлы или в отдельном поле в базе. Когда я писал на
У меня все хранится в базе, но также происходит и выливание их на диск.
Само приложение 3-х уровневое:
1) Window -клиент (это система администрирования) и WEB-клиент (реально это сайт)
2) Application Server
3) SQL server

Когда добавляется картинка, то происходит ее сохранение в базе и выливание на диск WEB сервера.
У сайта есть HttpHandler, который обслуживает запросы на медиа-файлы. Когда приходит запрос, то через System.IO читаем всю информацию о файле, пишем в хидера HttpRespons'а и выливаем файл через Respose.WriteFile.

Все работает быстро. Дополнительный бонус, что когда база сайта передается на хостинг или клиенту, например, то сам кеш медиа-файлов таскать не обязательно, достаточно в системе администрирования сказать "Вылить кеш на диск".
PK, senior programmer of http://www.actis.ru
Павел Калякин, MCDS.NET, MCS
http://www.livejournal.com/users/pavelk — Мой блог
Re[2]: картинка в базе
От: LordOfThePigs  
Дата: 28.08.03 03:43
Оценка:
А вот такой вопрос. Не посчитайте за ламера
Допустим мы сохранили картинку в базе, а как теперь его в Response вставить?
Re[3]: картинка в базе
От: mogadanez Чехия  
Дата: 28.08.03 05:48
Оценка:
Здравствуйте, LordOfThePigs, Вы писали:

LOT>А вот такой вопрос. Не посчитайте за ламера

LOT>Допустим мы сохранили картинку в базе, а как теперь его в Response вставить?

см тут:
http://www.aspnetmania.com/ViewArticle.aspx?article_id=20&amp;tabid=3
... << RSDN@Home 1.0 beta 7a >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.