Laden...

mit FileUpload Bild in DB eingeben und wieder ausgeben

Erstellt von ChrisBa vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.805 Views
C
ChrisBa Themenstarter:in
54 Beiträge seit 2011
vor 12 Jahren
mit FileUpload Bild in DB eingeben und wieder ausgeben

Hallo,
bin noch neu in diesem Gebiet und habe mit FileUpload noch keine Erfahrung.

Folgendes...

  • ich hab ne SQL-DB mit nem Feld varbinary
  • habe auf meiner .aspx eine FileUpload mit nem Button (btnSave) zum Speichern

Bei Klick auch btnSave soll dass ausgewähle Bild in der DB gespeichert werden,
das ich folgendend löse:


            if (FileUpload1.PostedFile != null)
            {
                string productName = txtProductName.Text;
                byte[] productImage = FileUpload1.FileBytes;

                string constr = @"Data Source=CHRISTIAN-PC\SQLExpress;Integrated Security=true;AttachDbFilename=C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\DBiFirma.mdf;Database=DBiFirma; Trusted_Connection=yes;";
                string query = "INSERT INTO TBProducts(ProductName, ProductImage) VALUES(@ProductName, @ProductImage)";

                SqlConnection con = new SqlConnection(constr);
                SqlCommand com = new SqlCommand(query, con);

                com.Parameters.Add("@ProductName", SqlDbType.NVarChar).Value = productName;
                com.Parameters.Add("@ProductImage", SqlDbType.VarBinary).Value = productImage;

                con.Open();
                int result = com.ExecuteNonQuery();
                con.Close();

                if (result > 0)
                {
                    lblMessage.Text = "Product Saved Successfully";  
                }
            }
            else
            {
                lblMessage.Text = "Please Select Product Image File";
            }

            Response.Redirect("Einstellungen.aspx");
        }

Danach habe ich einen Eintrag in meiner DB den ihr im angehängten Bild sehen könnt.

im Pageload Möchte ich nun mein Bild aus der DB wieder ausgeben das aber leider nicht funtioniert wie ihr ebenfalls im angehängten Bild sehen könnt.

Was mache ich Falsch??
Danke schon mal im Voraus.
MFG

Das Schicksal bevorzugt jene die bereit sind.

3.170 Beiträge seit 2006
vor 12 Jahren

Hallo,

das geht so nicht - Du kannst nicht einfach ein Bild ins HTML schreiben.

Und bevor Du Dir Illusionen machst: Es ist auch nicht möglich, das mit einem einzigen Request an den Server zu machen.

Du musst ein ganz normales <image src="|URL zum Bild|">-Tag erstellen, das als src eine URL bekommt, unter der der Browser das Bild abrufen kann.
Dazu eignet sich am besten, in der Webapplikation einen HttpHandler (.ashx-Datei) zu implementieren, der das Bild anhand einer ID, die mit in der URL steckt, an den Client ausliefern kann.

Die Forumssuche liefert mit HttpHandler bzw. IHttpHandler jede Menge brauchbare Informationen dazu.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

2.891 Beiträge seit 2004
vor 12 Jahren

Du kannst nicht einfach ein Bild ins HTML schreiben.

Naja, eigentlich geht das schon. Man kann Bilder direkt als Base64 via Data URLs ins HTML schreiben. Sieht dann z.B. folgendermaßen aus:

<IMG
   SRC="data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw
   AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFz
   ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp
   a/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJl
   ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uis
   F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH
   hhx4dbgYKAAA7">

Aber ob das praktikabel ist, weiß ich nicht. Irgendwo stand auch was von einer Grenze von 4kB.

Gruß,
dN!3L

M
402 Beiträge seit 2005
vor 12 Jahren

Naja, eigentlich geht das schon. Man kann Bilder direkt als Base64 ...

Dieses Feature unterstützen aber nur bestimmte Browser.
Vor allem mit älteren IE-Modellen hat ma da Probleme, bzw. keine Grafik.

Persönlich würd ich das eigentlich nicht einsetzen.
Am Besten ist das mit dem HttpHandler gelöst.
Der kriegt als Parameter die ImageId oder einen Dateinamen und
liefert das Bild zurück. Dabei könnte man dann gleich noch
resize- und crop-Funktionen miteinbauen...

Dazu gibts aber auch unzählige Tutorials im Web...

16.842 Beiträge seit 2008
vor 12 Jahren

Tut mir leid für die Zwischenfrage: aber was hat das ganze für Vorteile?

* Die Datenbank wird schnell ziemlich groß ( damit auch Backups )
* Caching kann nicht genutzt werden
* Produktbilder kann man als statische Ressourcen bezeichnen, die sich so schnell nicht ändern werden

G
538 Beiträge seit 2008
vor 12 Jahren

Ich möchte eine Anmerkung zu Abt's Zwischenfrage machen:

  1. Auch Datei-Backups sind groß (zeimlich gleich, wenn man so will)
  2. Caching kann Clientseitig sehr wohl genutzt werden - es spricht nichts dagegen (denn dem Client ist's egal, ob ein Bild aus der DB geladen wird oder von der Platte des Servers - woher soll er das auch merken?)
  3. Das ist richtig, aber nicht so relevant, wenn 2) funktioniert

Als Anmerkung noch: es gibt iwo im Netz (ich habs leider grade nicht zur Hand) einen Versuch von MS als Whitepaper, ob Dateien lieber in die Datenbank sollen oder auf die Festplatte.
Das Ergebnis des Whitepapers ist grob das folgende:
Alles unter 10MB in die Datenbank - das ist schneller als von Festplatte (ich war auch verwundert - aber es hängt wohl mit Fragmentierung und ähnlichen Effekten zusammen).

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)