Zobrazení obrázků ze složky   otázka

ASP.NET WebForms

Ahoj all,

Potřeboval bych poradit jak mám provést příkaz vypsání vypsání obrázků ze složky, u každé položky mám v DB napsánu cestu, postačí už zde jednou zmiňovaná komponenta

<asp:image id="myimage" runat="server"
     imageurl='<% #Eval("ImgUrl")%>' />

nebo je zapotřebý jiná komponenta???

Předem děkuji za jakoukoliv odpověď

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Už se to tady na fóru jednou řešilo, používá se k tomu komponenta Repeater (třeba).

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Byl to můj dotaz.

tady. Snad to pomůže, mě mě to pomohlo moc.

http://www.vbnet.cz/forum-tema--2967-pro...

http://www.vbnet.cz/forum-tema--2933-upl...

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Celé sem si to pročetl a pravděpodobně vůbec sem to nepochopil jediné co jsem pochopil že mám udělat tak je to že mám vzít tu funkci vložit ji na stránku kde chci zobrazovat obrázky

"V MÉM PŘÍPADĚ JE TO Akce.aspx.vb"

Protected Sub Page_Load(sender As Object, e As EventArgs)
    'nachystat seznam pro adresy obrázků
    Dim obrazky As New List(Of String)

    'projít všechny obrázky ve složce Images
    For Each f As String In System.IO.Directory.GetFiles(Server.MapPath("~/Images"), "*.jpg")
        'zjistit název souboru
        Dim name As String = System.IO.Path.GetFileName(f)
        'poskládat URL adresu
        Dim url As String = ResolveClientUrl("~/Images/" & name)
        'přidat ji do seznamu
        obrazky.Add(url)
    Next

    'předat seznam obrázků repeateru
    Repeater1.DataSource = obrazky
    Repeater1.DataBind()
End Sub

a do souboru "Akce.aspx" vložit tento kód:

<asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
        <img src="<%#Container.DataItem%>" alt="Obrázek ze složky" />
    </ItemTemplate>
</asp:Repeater>

ale nepochopil jsem kde vezmu ten link k dané složce který mám umístěn v DB

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ten kód byl příklad, když jsem chtěl na stránku nasypat všechny obrázky co jsem měl ve složce Images. Pokud to chceš z databáze tak do repeateru místo souborů ve slžce images nahrneš data z databáze.

Pokud chceš tahat údaje z databáze tak v kódu by to bylo nějak takhle(vykopíroval jsem to z jednoho mojeho pokusu, tak po menší úpravě by ti to mohlo pomoct). Tady to mam jen pro jeden záznam:

        Dim myCommand As SqlDataAdapter
        Dim connetionString As String
        Dim cnn As SqlConnection
        connetionString = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True"
        cnn = New SqlConnection(connetionString)
        Try
            cnn.Open()
            'MsgBox("Connection Open ! ")
            'myCommand = New SqlDataAdapter("SELECT * FROM jmena", cnn)
            myCommand = New SqlDataAdapter("SELECT * FROM [Jmena] WHERE ([ID] = 5)", cnn)
            Dim ds As DataSet = New DataSet()
            myCommand.Fill(ds)
            MyRepeater.DataSource = ds
            MyRepeater.DataBind()
            cnn.Close()
        Catch ex As Exception
            MsgBox("Can not open connection ! ")
        End Try

A je ještě zapotřebí :

<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

Pokud sledeujtete videotutoriály o ASP.net, tak myslím, že je to 9. díl.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

počkat ty jsi mi nepochopil předchozí námět,

V DB mám URL ke složce s foto a né každej screen ze složky

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Hm, tak blíž už ti bude asi muset poradit někdo kdo tomu rozumí víc. Já předpokládal, že v kódu si vytáhneš z databáze cestu ke složce s obrázkama, pak projdeš složku s obrázkama co ti vyhodila databáze a nacpeš si celý cesty k obrázkům do pole a to předáš repeateru.

V mém příkladě, kdybys měl v databázi database.mdf, tabulku jmena, sloupec name (zde bysm měl ty tvoje cesty).

Tak do repeateru dáš

<%#DataBinder.Eval(Container.DataItem, "Name")%>

a vyhodí ti to tu tvojí cestu ke složce (v mém příkladě je ještě podmínka ID = 5 takže by to vyhodilo nejspíš pátou složku - záleží jak si dáš ID) .

Pkud to chceš i s cestou k souborům, tak to musíš spojit ještě v části kódu.

Když se ti pokusim napovědět tak já bych spojil z obou kódu tyto dvě mproměnné: ds & name (ceskta ke složce a jméno souboru)

Snažim se poradit co jde, ale víc už fakt nezvládnu, tak jestli to nestačí, nebo nějak zavádim tak sorry :)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

no snad už to pomocí předešlích kódů a linků na kódy zvládnu dík

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nevím, proč pán nademnou vytahoval pomocí kódu. Repeater je komponenta která umí spolupracovat se SqlDataSource!

V databázi mějte jako adresu tvar: "http://www.nazevwebu.cz/Img/i1.png", ano?

Kód tabulky v MSSQL:

Create Table Obrazky(
 [IdObr] int NOT NULL Primary Key Identity(1,1),
 [Url] nvarchar(MAX) NOT NULL
)

INSERT INTO [Obrazky] ([Url]) VALUES ('http://vbnet.cz/reklamy/banner_msdn_soutez_150x200.gif')

a kód ASP.NET:

<div>
    
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="<%$ ConnectionStrings:testdataConnectionString %>" 
            SelectCommand="SELECT * FROM [Obrazky]"></asp:SqlDataSource>
    
    </div>
    <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1">
     <ItemTemplate>
      <asp:Image ID="ObrMy" runat="server" ImageUrl='<%# Eval("Url") %>' AlternateText="každý první" />
     </ItemTemplate>
     <AlternatingItemTemplate>
      <asp:Image ID="ObrMy" runat="server" ImageUrl='<%# Eval("Url") %>' AlternateText="každý druhý" />
     </AlternatingItemTemplate>
    </asp:Repeater>

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

No co jsem právě pochopil, tak v databázi má jen cestu k adresáři a z něj chce vyčíst všechny obrázky. Takhle bych na to asi šel taky. Přes kód jsem na to šel proto, protože pak bude chtít porcházet složky a vyhledávat v nich obrázky. Ale díky za kód, kde vidim jak by to mělo být řešené.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

konečně někdo, kdo pravděpodobně chápe co potřebuji

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

A tím myslíte koho?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Bohumila Bílého

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak už to chápu:

Protected Sub Page_Load(sender As Object, e As EventArgs)
    Using Mcon As New SqlConnection("Connection string")
     Using Mcom As New SqlCommand("SELECT [UrlAdresar] FROM [Cesty]", Mcon)
      Mcon.Open()

    'nachystat seznam pro adresy adresářů
    Dim adresare As New List(Of String)
    'a obrázků
    Dim obrazy As New List(Of string)
    'čtení adres
    Dim Msqldr As New SqlDataReader = Mcom.ExecuteReader()
    'dokud není vše přečteno...
    Do While Msqldr.Read()
    '... přidávat do listu
    'Msqldr(názevsloupce) přečte sloupec uvedený v závorce
    adresare.Add(Msqldr("UrlAdresar"))
    Loop
     Mcon.Close()
    'vytahovat adresáře...
    For Each adrs As String In adresare
     '...a vyhledávat obrázky
         For Each f As String In System.IO.Directory.GetFiles(adrs, "*.jpg")
        'zjistit název souboru
        obrazky.Add(f)
    Next
    'předat seznam obrázků repeateru
    Repeater1.DataSource = obrazy
    Repeater1.DataBind()
End Sub 

repeater:

<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<asp:image id="myimage" runat="server"
     imageurl='<%#Container.DataItem%>' />
</ItemTemplate>
</asp:Repeater>

a připomínám: databáze dávejte CELOU! cestu k adresáři:

http://www.nazevwebu.cz/img

nahlásit spamnahlásit spam 0 odpovědětodpovědět

mám vyzkoušeno že staší zadat pouze cestu z kořenovýho adresáře např.: img/img

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jen dotaz..máte obrázky ve více složkách a nebo jsou všechny pouze v jedné?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vše mám ve složce složka/podsložka/img.jpg

nahlásit spamnahlásit spam 0 odpovědětodpovědět

mám menší problem s tím tvým scriptem když ho tam vložím tak mi to vypíše chybu viz obrázek:

http://www.gold-files.cz/screens/erorr.g...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Já osobně bych to řešil jednodušeji a to :

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="<%$ ConnectionStrings:ConnString %>"
SelectCommand="SELECT [UrlAdresar] FROM [Cesty]"></asp:SqlDataSource>

<asp:Repeater ID="Repeater1"  runat="server" DataSourceID="SqlDataSource1">
<ItemTemplate>
<asp:image id="myimage" runat="server"
     imageurl='<%#DataBinder.Eval(Container.DataItem,"UrlAdresar")%>' />

Netestoval jsem to,ale nevidim důvod,proč by to nemělo fungovat.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Pošlete celý kód stránky.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Sice nevím na koho byl mířen ten požadavek na kód celé stránky,ale nechápu proč ho požadujete.Řeší se tu daný problém a k tomu celou stránku opravdu nepotřebujete.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ano, ale z toho obrázku opravdu moc nevyčtu.

Bylu to směřováno na tazatele.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback