/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
cache fil: hent fra url og gem de
Fra : Leif Neland


Dato : 23-12-08 16:41

Jeg har oprettet en bunke produkter fra en grossist i vores produktdatabase.

Der er billeder til dem, men dem har jeg ikke fået.

Jeg kunne webscrape dem, og lægge dem lokalt, men det er næppe ret mange
af dem, der vil blive brugt.

Så har jeg lavet en custom 404 i billedmappen, så requests til
http://vores.dom/images/grossist/12345.jpg redirectes til
http://grossist.dom/images/12345.jpg

Men det er jo ikke pænt at bruge grossistens båndbredde til det, så jeg
vil, hvis filen ikke findes lokalt, lade 404-scriptet hente den fra
grossisten, gemme den lokalt, og så servere billederne derfra.

Næste gang billedet skal vises, findes det så lokalt, og 404-scriptet
bliver ikke kaldt.

Så hvordan får jeg mit asp-script til at hente en fil og gemme den?

Leif

 
 
Stig Johansen (23-12-2008)
Kommentar
Fra : Stig Johansen


Dato : 23-12-08 16:55

Leif Neland wrote:

> Jeg har oprettet en bunke produkter fra en grossist i vores
> produktdatabase.
>
> Der er billeder til dem, men dem har jeg ikke fået.

Er du så ude efter en midlertiqdig løsning indtil du får dem ?

> Så har jeg lavet en custom 404 i billedmappen, så requests til
> http://vores.dom/images/grossist/12345.jpg redirectes til

Lav din request om til eksempelvis
http://vores.dom/images/grossist/12345.asp

> Men det er jo ikke pænt at bruge grossistens båndbredde til det, så jeg
> vil, hvis filen ikke findes lokalt,

Her kan du bruge FileExists

> lade 404-scriptet hente den fra
> grossisten, gemme den lokalt, og så servere billederne derfra.

Lidt afhængig af hvad du har til rådighed af komponenter (w3 socket skulle
vist være udbredt), kan du hente billedet, og gemmer det lokalt, og
derefter servicere det fra filen.

> Næste gang billedet skal vises, findes det så lokalt, og 404-scriptet
> bliver ikke kaldt.

Hvis ovennævnte FileExists er true, så er det bare at servicere filen.
Eventuelt kan man lave noget tjek på hvor 'gammel' filen er.

--
Med venlig hilsen
Stig Johansen

Leif Neland (23-12-2008)
Kommentar
Fra : Leif Neland


Dato : 23-12-08 18:29

Stig Johansen skrev:
> Leif Neland wrote:
>
>> Jeg har oprettet en bunke produkter fra en grossist i vores
>> produktdatabase.
>>
>> Der er billeder til dem, men dem har jeg ikke fået.
>
> Er du så ude efter en midlertiqdig løsning indtil du får dem ?
>
>> Så har jeg lavet en custom 404 i billedmappen, så requests til
>> http://vores.dom/images/grossist/12345.jpg redirectes til
>
> Lav din request om til eksempelvis
> http://vores.dom/images/grossist/12345.asp
>
>> Men det er jo ikke pænt at bruge grossistens båndbredde til det, så jeg
>> vil, hvis filen ikke findes lokalt,
>
> Her kan du bruge FileExists

Alt ovennævnte ting er overflødigt, det klarer 404-scriptet.
>
>> lade 404-scriptet hente den fra
>> grossisten, gemme den lokalt, og så servere billederne derfra.
>
> Lidt afhængig af hvad du har til rådighed af komponenter (w3 socket skulle
> vist være udbredt), kan du hente billedet, og gemmer det lokalt, og
> derefter servicere det fra filen.

Ja, det var ligesom det, jeg søgte assistance til...

Leif

Stig Johansen (24-12-2008)
Kommentar
Fra : Stig Johansen


Dato : 24-12-08 05:09

Leif Neland wrote:

> Stig Johansen skrev:
>> Lidt afhængig af hvad du har til rådighed af komponenter (w3 socket
>> skulle vist være udbredt), kan du hente billedet, og gemmer det lokalt,
>> og derefter servicere det fra filen.
>
> Ja, det var ligesom det, jeg søgte assistance til...

Det var lige så meget et spørgsmål om har eksempelvis w3 sokets.
Hvis du har det, han du tage udgangspunkt i dette eksempel på HTTP:
<http://www.dimac.net/products/freeproducts/w3sockets/examples/Get.htm>

Den returnerede buffer vil indeholde en stribe headers adskilt af vbCrLf, en
ekstra vbCrLf, og derefter selve billedet.

De første 3 tegn i bufferen er statuskoden, som skal være "200".

Jeg vil tro man bare kan lave en søgning (instr) efter vbCrLf+vbCrLf, og
gemme resten i en fil.

Husk det er binære data.

--
Med venlig hilsen
Stig Johansen

Leif Neland (24-12-2008)
Kommentar
Fra : Leif Neland


Dato : 24-12-08 14:02

Stig Johansen skrev:
> Leif Neland wrote:
>
>> Stig Johansen skrev:
>>> Lidt afhængig af hvad du har til rådighed af komponenter (w3 socket
>>> skulle vist være udbredt), kan du hente billedet, og gemmer det lokalt,
>>> og derefter servicere det fra filen.
>> Ja, det var ligesom det, jeg søgte assistance til...
>
> Det var lige så meget et spørgsmål om har eksempelvis w3 sokets.
> Hvis du har det, han du tage udgangspunkt i dette eksempel på HTTP:
> <http://www.dimac.net/products/freeproducts/w3sockets/examples/Get.htm>
>
> Den returnerede buffer vil indeholde en stribe headers adskilt af vbCrLf, en
> ekstra vbCrLf, og derefter selve billedet.
>
> De første 3 tegn i bufferen er statuskoden, som skal være "200".
>
> Jeg vil tro man bare kan lave en søgning (instr) efter vbCrLf+vbCrLf, og
> gemme resten i en fil.
>
> Husk det er binære data.
>
Her er de væsentlige sider af 404-handleren for /images/-mappen
De externe billeder hedder www.voressite.dom/images/leverandor/.jpg
Hvis de ikke findes lokalt, hentes de fra den externe leverandør, og
gemmes lokalt.
Hvis de heller ikke findes externt, markeres det i databasen, så den
externe leverandor ikke plages hele tiden, og der redirectes til
intetbillede.jpg

Jeg fandt funktionerne BinaryGetURL og SaveBinaryData, der tog sig
SomeDir = Request.ServerVariables("Query_String")
SomeDir = Mid(SomeDir, InStrRev(SomeDir, "/images/") + 1, Len(SomeDir))
p = InStr(SomeDir,"/leverandor/")
if p>0 then
   img=Mid(SomeDir, p + 7, Len(SomeDir))
Location = "http://www.leverandor.com/image/item/"& img
destdir ="E:\websites\vores\www\images\produkter\leverandor\"
destimg = destdir & img
binimg= BinaryGetURL(Location)
if lenb(binimg)>lenb("") then
Response.status = "200 OK"
response.BinaryWrite binimg
SaveBinaryData destimg,binimg
response.end
else
Set Record = Server.CreateObject("ADODB.Connection")
DbConnect Record, database, SqlDateSep

   billede1="leverandor/" & img
   sql = "update produkter set billede1='intetbillede.jpg?" & img &"'
where billede1='"&billede1&"'"
   record.execute(sql)
end if
end if

'Hvis det ikke er et externt billede, eller det ikke findes, så vis
"intetbillede.jpg"

newLocation = "http://www.voressite.dk/images/produkter/intetbillede.jpg"
Response.Status = "302 Moved temporarily"
Response.AddHeader "Location", newLocation
Response.End


Function BinaryGetURL(URL)
Dim Http
Set Http = CreateObject("WinHttp.WinHttpRequest.5.1")

Http.Open "GET", URL, False
Http.Send

if Http.status = 200 then
BinaryGetURL = Http.ResponseBody
else
BinaryGetURL = ""
end if
End Function

Function SaveBinaryData(FileName, ByteArray)
Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2

Dim BinaryStream
Set BinaryStream = CreateObject("ADODB.Stream")

BinaryStream.Type = adTypeBinary

BinaryStream.Open
BinaryStream.Write ByteArray

BinaryStream.SaveToFile FileName, adSaveCreateOverWrite
End Function

Stig Johansen (25-12-2008)
Kommentar
Fra : Stig Johansen


Dato : 25-12-08 06:20

Leif Neland wrote:

> Set Http = CreateObject("WinHttp.WinHttpRequest.5.1")

Den kendte jeg ikke (har nok fokuseret for meget på xmlhttprequest).

Det gør det unægteligt nemmere, når det er indbygget, i stedet for 3. parts
komponenter.

--
Med venlig hilsen
Stig Johansen

Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409074
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste