Σωστή η κατεύθυνση σου και μπόρεσα κ προχώρησα λίγο. Αυτό που βρήκα είναι ότι το πεδίο τύπου Attachment είναι container και (προφανώς) έχει πεδία, με ένα από αυτά να είναι το FileData. Άρα αντί να γράψω στο SQL query "SELECT Picture" γράφω "SELECT Picture.[FileData]". Ο κώδικας μου πλέον είναι κάπως έτσι:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <%@ language="VBSCRIPT" codepage="1253" %> <% set myConn=Server.CreateObject("ADODB.Connection") myConnStr="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Server.MapPath("App_Data\ItemsData.accdb") & ";Persist Security Info=False;" myConn.open(myConnStr)
set rsimage=Server.CreateObject("ADODB.Recordset") query="SELECT Picture.[FileData] FROM NewItemTable where CodeStore='ΑΕΡΟ-001'" rsimage.open query,myConn,3,3
If not rsimage.EOF Then set strtemp = rsimage(0) response.Expires = 0 response.Buffer = True response.Clear Response.ContentType = "image/jpg" Response.BinaryWrite strtemp
Response.End end if rsimage.close set rsimage=nothing myConn.close %> |
Παρόλα αυτά, η εικόνα δεν εμφανίζεται.
Βέβαια, η αρχική εικόνα έχει μέγεθος 5.04kb ενώ αυτό που δίνει ο server είναι 5.06kb. Άρα μήπως από την Access παίρνω σωστά τα δεδομένα, και χαλάω κάτι με τους headers;
Edit: Όπως ανέφερα κ πιο πριν, προσπάθησα το ίδιο script σε asp.net. Αυτό που βρήκα είναι ότι με το ίδιο sql query (SELECT Picture.[FileData] FROM....) παίρνω ένα byte array, αλλά αυτό είναι 20 byte μεγαλύτερο από το μέγεθος της εικόνας. Αν κάνω λοιπόν, Response.BinaryWrite() από το 21ο byte και μετά η εικόνα εμφανίζεται σωστά!! Άρα κάπως αλλιώς πρέπει να διαβάσω τα data. Πάντως βρήκα αρκετά threads που ρωτάνε το ίδιο πράγμα, αλλά σε κανένα δεν υπήρχε λύση.
Υ.Γ. Σε asp πάντως δεν μπόρεσα να "κόψω" τα 20 πρώτα bytes από το rsimage(0).
Τάσος Καραγιάννης
Baby debugging steps...