Hej Kanske detta kan vara till din hjälp? Tack, ska pröva. Var finns bra info om allt hur ADODB.Stream fungerar? Ytterligare en undran... Jag har nu lyckats få in filerna som jag vill i databasen, men när de ska visas så ska de först passera en komponent som heter Graphicsprocessor för att bl.a. justera storleken. Jag chansar på att det är objRaster.LoadStream som strular. Jag vet inte vad den förväntar sig för datatyp. Men det låter som den vill ha et hantag till en stream eller ett objekt som stöder Stream gränssnitet. I dokumentationen om står det så här:fil till binär lagring i databas?
Jag vill kunna läsa in en fil som redan ligger i en mapp på servern
och sedan stoppa in den i en databas.
Trodde det skulle kunna funka enligt koden nedan men det gör det icke.
Nån som kan hjälpa mig?
Är jag helt ute och cyklar kanske? :)
<code>
<%
' kod
Function getByteString(StringStr)
For i = 1 to Len(StringStr)
char = Mid(StringStr,i,1)
getByteString = getByteString & chrB(AscB(char))
Next
End Function
filen = "esb11.jpg"
Dim fso
Set fso = Server.CreateObject("Scripting.FileSystemObject")
if fso.FileExists(Server.MapPath(filen)) = true then
' om finns, läs in
set fh = fso.OpenTextFile(Server.MapPath(filen))
filinnehall = fh.readall
end if
Set fso = Nothing
'förbered variabler till databas
filename= "esb11.jpg"
filesize= lenB(filinnehall)
filedata= getByteString(filinnehall)
filetype= "image/pjpeg"
'öppna databas och lagra
set ConnBin= server.createobject("ADODB.Connection")
ConnBin.Open "DSN=FileDB"
Set rs2 = Server.CreateObject("ADODB.Recordset")
SQLstring2= "select * from binaryfiles where 1=2"
rs2.Open SQLstring2, ConnBin, 1, 2
rs2.AddNew
rs2("filename") = filename
rs2("filesize") = filesize
rs2("filedata").AppendChunk filedata
rs2("filetype") = filetype
rs2.Update
rs2.Close
Set rs2= Nothing
ConnBin.Close
set ConnBin= nothing
%>
</code>Sv: fil till binär lagring i databas?
<%
Dim rs2
Dim Stream
Dim ConnBin
'Öppnar filen
Set Stream = Server.CreateObject("ADODB.Stream")
Stream.Type = 1
Stream.Open
Stream.LoadFromFile Server.MapPath(filen)
'Öppna databas
set ConnBin= server.createobject("ADODB.Connection")
ConnBin.Open "DSN=FileDB"
'Öppna recordset
Set rs2 = Server.CreateObject("ADODB.Recordset")
rs2.Open "SELECT * FROM binaryfiles WHERE 1=2", ConnBin, 1, 2
'Sparar fil
rs2.AddNew
rs2("filename") = "esb11.jpg"
rs2("filesize") = Stream.Size
rs2("filedata").AppendChunk Stream.Read
rs2("filetype") = "image/pjpeg"
rs2.Update
'Stänger allt
Stream.Close
Set Stream = Nothing
rs2.Close
Set rs2= Nothing
ConnBin.Close
Set ConnBin= Nothing
%> Sv: fil till binär lagring i databas?
En annan snabb fråga... i mitt exempel vet jag innan att filen i fråga är en jpeg. Kan jag vid öppnade av filen få fram contenttype om den är okänd?Sv: fil till binär lagring i databas?
Försökte titta på MSDN men lyckades inte hitta något bra där... Vad innebär t.ex. Type 1?Sv: fil till binär lagring i databas?
Jag försöker ladda in bilden till komponenten genom koden nedan men får "inkompatibla typer" som svar...
Nu kanske inte du känner till just denna komponent, men kan du ändå se vad jag gör galet kanske? Har jag helt missuppfattat hur Stream funkar kanske... :-)
<code>
'......
Set rs = Server.CreateObject("ADODB.Recordset")
SQLstring= "select filedata from binaryfiles where id=" & int(fileid)
rs.Open SQLstring, ConnBin
If Not rs.EOF Then
fileData2= rs("filedata")
end if
Set Stream = Server.CreateObject("ADODB.Stream")
Stream.Type = 1
Stream.Open
Stream.write fileData2
' ----------------------------------------------------------------------
Dim objRaster, objEncoder
Set objRaster = Server.CreateObject("GraphicsProcessor2002.RasterObject")
Set objEncoder = Server.CreateObject("GraphicsProcessor2002.JPEGEncoderInfo")
objRaster.LoadStream Stream.read
'... koden klippt
</code>Sv: fil till binär lagring i databas?
Du kan ju försöka med:
objRaster.LoadStream Stream
Annars behöver jag nog dokumentationen för komponenten.
Sedan är det ju kanske bättre att konvertera filen när du läser in den. Ev lägga till en extra kolumn för den behandlade bilden. Slipper den ju bearbeta bilden varje gång den ska visas.Sv: fil till binär lagring i databas?
--------
LoadStream Method
LoadStream loads image from specified stream. All the raster image types which are supported by GDI+ are available. At the present day the following image formats are supported: JPEG, BMP, GIF, TIFF and PNG.
Syntax
object. LoadStream( InputStream)
Parameters
object - an instance of the RasterObject or RasterItem object.
InputStream - specifies the stream object which contains the image.
--------
Hjälper detta? Kan du ge nåt tips då?
Sen detta med att behandla bilden när den visas.
Jag hade tänkt att man lagrar bilder med t.ex. 600 pixels i bredd idatabasen och vid visning av bilden kan man i förväg ange om den ska visas som 300 bred, 400 eller vad man nu vill.
Är detta en dum lösning i praktiken då, eftersom bilden måste bearbetas vid varje visning?
Själv hade jag tänkt att det var en smart lösning då man bara behöver lagra en bild oavsett om man sedan behöver visa den i olika storlekar på olika delar av en hemsida.