Hallå, Det är ganska enkelt löst, du angriper dock problemet på fel sätt. Tack för ditt svar!Visa bild från Access databas
Jag ska visa en bild som är lagrad i en Access databas men får bara ett kryss i bilden?! Vad är det jag missar?
Lagar bilden enligt:
Private Sub InsertFile(ByVal strFileName As String, ByVal abyContent As Byte())
Dim strQuery As String = "INSERT INTO Files (FileName,FileContent)VALUES(?,?)"
Dim oConnection As New OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & HttpContext.Current.Server.MapPath("./DB/Brud_o_Fest.mdb") & "; Mode=ReadWrite;")
Dim oCommand As New OleDbCommand(strQuery, oConnection)
Dim oParameters As OleDbParameter = Nothing
oParameters = New OleDbParameter("?", OleDbType.VarChar)
oParameters.Value = strFileName
oParameters.Direction = ParameterDirection.Input
oCommand.Parameters.Add(oParameters)
oParameters = New OleDbParameter("?", OleDbType.VarBinary)
oParameters.Value = abyContent
oParameters.Direction = ParameterDirection.Input
oCommand.Parameters.Add(oParameters)
oCommand.CommandTimeout = 120
oCommand.CommandType = CommandType.Text
Try
oConnection.Open()
oCommand.ExecuteNonQuery()
Catch ex As Exception
Throw ex
Finally
If oConnection.State <> ConnectionState.Closed Then
oConnection.Close()
End If
End Try
End Sub
Protected Sub btnUpload_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUpload.Click
If Not FileUpload1.FileContent Is Nothing Then
With FileUpload1.FileContent
Dim abyContent(CType(.Length, Integer)) As Byte
.Read(abyContent, 0, .Length)
Me.InsertFile(FileUpload1.FileName, abyContent)
End With
End If
Och försöker komma åt den via:
<asp:GridView ID="GridView1" runat="server" Width="600px" BackColor="White" BorderColor="#E7E7FF"
BorderStyle="None" BorderWidth="1px" CellPadding="3" GridLines="Horizontal" AutoGenerateColumns="False"
EmptyDataText="No data found">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<img alt="" src='<%# Container.DataItem("FileContent") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="FileName" HeaderText="Filnamn" SortExpression="Fil" />
</Columns>
<FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
<RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Center" />
<PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Right" />
<SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />
<HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" VerticalAlign="Middle" />
<AlternatingRowStyle BackColor="#F7F7F7" />
</asp:GridView>
Men som sagt så får jag ett kryss i bilden? Några tips?!
Mvh,
Thomas
Sv: Visa bild från Access databas
Först och främst: säkerställ på något sätt att filen verkligen sparas i databasen.
Sen bör du även lagra filens mimetype på nåt sätt. (Googla på det...)
Lösningen:
Skapa en .aspx fil som tar emot bildens ID via querystring (t.ex. "image.aspx?imgid=filnamn.jpg")
I .aspx filen ("image.aspx") gör du något i stil med:
Response.Clear();
OleDbConnection objConn = new OleDbConnection("din connectionstring");
OleDbCommand objCmd = new OleDbCommand("SELECT FileContent FROM Files WHERE FileName = 'filnamn.jpg'", objConn);
OleDbDataAdapter objAdapter = new OleDbDataAdapter();
objAdapter.SelectCommand = objCmd;
DataTable objTable = new DataTable();
objAdapter.Fill(objTable);
Response.ContentType = "image/jpeg"; // Här har du mimetype, som egentligen skall hämtas från Db
Response.BinaryWrite( objTable.Rows[0]["FileContent"].ToString() );
Response.End();
I ditt grid hänvisar du sedan till bilden med följande snutt:
<img src="image.aspx?imgid=filnamn.jpg" />
Brasklappar för exemplet ovan:
* Stäng alltid connections och nollställ objekt när du är färdig med dem
* Koden ovan är inte testad utan freestyle:ad
Detta är bara ett sätt att lösa det, ett kanske snyggare sätt är att skriva en HttpModule som snappar upp en URL och söker upp bilden ur databasen. På det skulle man kunna lägga till så att man kan skala bilden (för t.ex. thumbnails osv), med mera osv.
Sv:Visa bild från Access databas
Det finns säkert snyggare lösningar på detta och min början på detta är säkert inte den bästa...=)
Jag ville bara ha en enkel lösnig på detta lilla projekt jag har. Dock så saknar jag erfarenhet att jobba med bilder och det optimala är säkert inte att ha bilder direkt i en Access databas. Men som sagt så ville jag bara göra det enkelt för mig att jobba mot Access som jag brukar, dock inte lika enkelt som jag hade hoppats...=)
Tack för ditt tips och jag ska se om jag får till det.
Mvh,
Thomas