Avatar billede tblaster Nybegynder
04. februar 2006 - 13:46 Der er 5 kommentarer og
1 løsning

Hente en fil direkte på serveren

Hejsa

Er det på nogen måde muligt at få en asp side til at hente en fil ned på en mappe på serveren. Det skal ikke være upload i form af at filen kommer fra en brugeres computer, men et system der gør at serveren henter filen fra en anden side.

Eksempelvis skal jeg kunne angive at den skal hente følgende fil:
http://www.eksperten.dk/img/elogo.png

På forhånd tak.
Avatar billede driis Nybegynder
04. februar 2006 - 14:23 #1
Avatar billede driis Nybegynder
04. februar 2006 - 14:33 #2
Her er et eksempel:

<%
Dim whttp
Set whttp = Server.CreateObject("WinHttp.WinHttpRequest.5.1")
whttp.Open "GET","http://www.eksperten.dk/img/elogo.png"
whttp.Send

'# Filen ligger nu i whttp.ResponseBody; vi kan f.eks. udskrive den til vores response
Response.ContentType = "image/png"
Response.BinaryWrite(whttp.ResponseBody)
%>

Her er reference for WinHttpRequest objektet:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winhttp/http/winhttprequest.asp
Avatar billede tblaster Nybegynder
04. februar 2006 - 14:49 #3
Har kigget lidt på det, man kan ikke se hvordan den skal kunne gemme filen på serveren. Efter hvad jeg kan se, så udskriver dit eksempel blot filen til browseren. Jeg skal have filen gemt på serveren.
Avatar billede driis Nybegynder
04. februar 2006 - 15:51 #4
Jeg havde forstået at dit problem bestod i at hente filen fra serveren. Når først den er hentet, kan du jo gøre med den hvad du vil. Ændret eksempel, der skriver til fil isf. http response:
<%
const adTypeBinary = 1
const adModeReadWrite = 3
const adSaveCreateOverwrite = 2

Dim whttp, stream
Set whttp = Server.CreateObject("WinHttp.WinHttpRequest.5.1")
whttp.Open "GET","http://www.eksperten.dk/img/elogo.png"
whttp.Send


Set stream = Server.CreateObject("ADODB.Stream")
stream.Type = adTypeBinary
stream.Mode = adModeReadWrite
stream.Open
stream.Write(whttp.ResponseBody)
stream.SaveToFile Server.MapPath("/e.png"),adSaveCreateOverWrite
stream.Close
%>

Læg mærke til at du skal sørge for at ASP/IIS brugerkontoen har skriveadgang til det sted på serveren, du vælger at placere filen. Det er typisk IUSR_maskinnavn.
Avatar billede tblaster Nybegynder
04. februar 2006 - 16:20 #5
Takker. Hvad skal adSaveCreateOverwrite stå til hvis den ikke må overskrive filerne, men skal gemme dem under et andet navn?
Avatar billede driis Nybegynder
04. februar 2006 - 16:51 #6
Du kan bruge adSaveCreateNotExist som parameter hvis du ikke ønsker at overskrive eksisterende filer. Så sker der en fejl hvis du forsøger at overskrive filen, dvs. du er sikker på aldrig at komme til at overskrive filer.

const adSaveCreateNotExist = 1
.
.
.
stream.SaveToFile Server.MapPath("/e.png"),adSaveCreateNotExist


Men du er nødt til selv at kontrollere om filen findes, og evt. vælge et andet navn hvis den gør. Det er der ikke noget indbygget logik til. Det kunne eksempelvis gøres med et Scripting.FileSystemObject
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester