Архифлеймер
Зарегистрирован: 28 June 2006
Сообщения: 3411
Примеры кода: 0
|
Re: Работа с БД: вывод изображений (рисунков) |
29 April 2008 08:18 |
|
|
|
|
авторв упор не представляю, как эти ссылки на пикты генерятся и как это все в коде выглядит хоть приблизительно.
ну смотри, парень не ленивый ))
вот дефолтная стр. куда будем выводить картинки с именами файлов
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetImages"
TypeName="Images" EnableViewState="False"></asp:ObjectDataSource>
<asp:ListView ID="ListView1" runat="server" ItemPlaceholderID="itemPlaceholder" DataSourceID="ObjectDataSource1"
GroupItemCount="3">
<LayoutTemplate>
<table cellpadding="10" runat="server" id="tb">
<tr runat="server" id="groupPlaceholder" />
</table>
</LayoutTemplate>
<GroupTemplate>
<tr runat="server" id="rw">
<td runat="server" id="itemPlaceholder" />
</tr>
</GroupTemplate>
<ItemTemplate>
<td id="td" align="center" runat="server">
<img alt="" src="/Public/Handlers/GifImage.ashx?fn=<%# Container.DataItem %>" />
<br />
<span>
<%# Container.DataItem %></span>
</td>
</ItemTemplate>
</asp:ListView>
<br />
<br />
<asp:DataPager ID="DataPager1" runat="server" PagedControlID="ListView1" PageSize="9">
<Fields>
<asp:NextPreviousPagerField ShowFirstPageButton="True"
ShowLastPageButton="True" />
</Fields>
</asp:DataPager>
вот код из папки app_code, который использует ObjectDataSource1
Imports Microsoft.VisualBasic
Imports System.IO
Public Class Images
Public Function GetImages() As List(Of String)
Dim list As New List(Of String)
Dim di As New DirectoryInfo(ConfigurationManager.AppSettings("WorkingPathForImages"))
Dim str = From f In di.GetFiles _
Select f.Name
For Each i In str
list.Add(i)
Next
Return list
End Function
End Class
вот код handler-a, который поднимает картинку с диска и выводит в сетку
<%@ WebHandler Language="VB" Class="GifImage" %>
Imports System
Imports System.Web
Imports System.IO
Imports System.Globalization
Imports System.Drawing
Public Class GifImage : Implements IHttpHandler
Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
Dim Request As HttpRequest = context.Request
Dim Response As HttpResponse = context.Response
Dim fn As String = HttpUtility.HtmlEncode(Request.QueryString("fn"))
If Not (fn Is String.Empty) Then
Dim ms As New MemoryStream
Dim grPhoto As Image = Image.FromFile(Path.Combine(ConfigurationManager.AppSettings("WorkingPathForImages"), fn))
grPhoto.Save(ms, System.Drawing.Imaging.ImageFormat.Gif)
grPhoto.Dispose()
Dim buffer() As Byte = ms.ToArray()
ms.Close()
Response.ContentType = "image/gif"
Response.OutputStream.Write(buffer, 0, buffer.Length)
Response.Flush()
Response.End()
End If
End Sub
Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
Get
Return False
End Get
End Property
End Classвот секция конфига, в которой прописаны константы для вышеприведённого кода
<appSettings>
<clear/>
<add key="WorkingPathForImages"
value="путь с диска до папки с картинками\Images\Foto"/>
</appSettings> авторс гемором придется смириться, так как иначе это будет слишком примитивно, как для дипломного проекта
надеюсь теперь твой дипломный проект спасён!?
точи под свою БД, под свои пути and etc.
если чего непонятно - спрашивай - объясню... ))
P.S.
авторМетод красивый. Но...
А если картинок будет очень много? Для каждой делать запрос? Не скажется ли это на производительности? Или просто я нифкурил?
ИМХО невкурил - проблема стара как мир, и там и там есть свои БОЛЬШИЕ минусы и, свои БОЛЬШИЕ плюсы... хранить картинки в БД так же удобно, как и на HDD...
|
|