Здравствуйте, 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
Здравствуйте, Gollum, Вы писали:
G>Здравствуйте, DenizK, Вы писали:
DK>>А чем лучше то? Например, картинок на странице 40 штук (галерея какая-нибудь). Отображаются они через http handler.
G>Тогда показываются, ессно, thumbnails маленького размера.
DK>>Нагрузка на сервер будет выше, если картинки хранить в БД. Конечно имхо если картинок мало и они маленькие то особых проблем не возникнит и при хранении в БД. DK>>Пробовал оба варианта, но больше понравился с сохранением в базе только путей к графическим файлам. Если я не ошибаюсь (нет под рукой исходника) в проекте community из asp.net starter kits использован тот-же подход.
G>Запросы можно будет кэшировать с помощью инфраструктуры ASP.Net. Если картинки размером около 100Кб, то я думаю этот способ оптимальный. Преимущества хранения в базе, я думаю, описывать не нужно. Однако, действительно, если картинки большие и БД не выдерживает связанных с их хранением загрузок, можно подумать о хранении в виде файлов. Выбор зависит исключительно от специфики задачи.
еще один незанчительный плюс хранения в файлах, по собственному опыту:
это когда приходится часто подправлять картинки, в этом случае их удобнее закачивать массой по ФТП, чем через ВебИнтерфейс в базу.
[думал, в "Базы данных" написать, но подумал, что лучше сюда]
Необходимо загружать и хранить картинки на сервере (размер килобайт по 100). Приложение, которое их будет загружать, пишется на ASP.NET. Как порекомендуете хранить эти картинки — как файлы или в отдельном поле в базе. Когда я писал на ASP — последний способ мне не нравился (нужно было загрузить картинку, потом ее в базу записать) и я преимущественно использовал первый. Как поступить в данном случае? .НЕТ довольно неплохо дружит с MS SQL, может, есть какой-то облегченный способ ака сказал писать прямо в базу и опа "одной командой" послал картинку в базу без геморройных способов записывания сначала на диск.
Здравствуйте, 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
Сначала руками парсил входной поток, файл получал но терялись переменные формы. Самому делать было лень, поэтому нашел для аплоада скрипт какого то чувака. Если будет нужно могу закинуть.
А чем лучше то? Например, картинок на странице 40 штук (галерея какая-нибудь). Отображаются они через http handler. Нагрузка на сервер будет выше, если картинки хранить в БД. Конечно имхо если картинок мало и они маленькие то особых проблем не возникнит и при хранении в БД.
Пробовал оба варианта, но больше понравился с сохранением в базе только путей к графическим файлам. Если я не ошибаюсь (нет под рукой исходника) в проекте community из asp.net starter kits использован тот-же подход.
Здравствуйте, DenizK, Вы писали:
DK>А чем лучше то? Например, картинок на странице 40 штук (галерея какая-нибудь). Отображаются они через http handler.
Тогда показываются, ессно, thumbnails маленького размера.
DK>Нагрузка на сервер будет выше, если картинки хранить в БД. Конечно имхо если картинок мало и они маленькие то особых проблем не возникнит и при хранении в БД. DK>Пробовал оба варианта, но больше понравился с сохранением в базе только путей к графическим файлам. Если я не ошибаюсь (нет под рукой исходника) в проекте community из asp.net starter kits использован тот-же подход.
Запросы можно будет кэшировать с помощью инфраструктуры ASP.Net. Если картинки размером около 100Кб, то я думаю этот способ оптимальный. Преимущества хранения в базе, я думаю, описывать не нужно. Однако, действительно, если картинки большие и БД не выдерживает связанных с их хранением загрузок, можно подумать о хранении в виде файлов. Выбор зависит исключительно от специфики задачи.
Любая весть изначально благая, просто ты к этому еще не привык
Здравствуйте, oRover, Вы писали: R>Необходимо загружать и хранить картинки на сервере (размер килобайт по 100). Приложение, которое их будет загружать, пишется на ASP.NET. Как порекомендуете хранить эти картинки — как файлы или в отдельном поле в базе. Когда я писал на
У меня все хранится в базе, но также происходит и выливание их на диск.
Само приложение 3-х уровневое:
1) Window -клиент (это система администрирования) и WEB-клиент (реально это сайт)
2) Application Server
3) SQL server
Когда добавляется картинка, то происходит ее сохранение в базе и выливание на диск WEB сервера.
У сайта есть HttpHandler, который обслуживает запросы на медиа-файлы. Когда приходит запрос, то через System.IO читаем всю информацию о файле, пишем в хидера HttpRespons'а и выливаем файл через Respose.WriteFile.
Все работает быстро. Дополнительный бонус, что когда база сайта передается на хостинг или клиенту, например, то сам кеш медиа-файлов таскать не обязательно, достаточно в системе администрирования сказать "Вылить кеш на диск".
Здравствуйте, LordOfThePigs, Вы писали:
LOT>А вот такой вопрос. Не посчитайте за ламера LOT>Допустим мы сохранили картинку в базе, а как теперь его в Response вставить?