Avatar billede lund_dk Praktikant
20. februar 2006 - 18:06 Der er 9 kommentarer og
1 løsning

Hent en fil fra server udenfor wwwroot

hej!

Via et upload script gemmer jeg filer som er udenfor wwwroot
den ligger i : C:\W3Sites\quitzauconstruction\intrafiles\

Root ligger i: C:\W3Sites\quitzauconstruction\www\

Jeg skal med et ASP script så kunne give en bruger mulighed for at downloade en fil derfra, jeg har forsøgt med dette, men får denne fejl:

Server.MapPath() error 'ASP 0172 : 80004005'

Invalid Path

/intra/getfile.asp, line 25

The Path parameter for the MapPath method must be a virtual path. A physical path was used.


Nogen som kan hjælpe??
------------
min kode
------------


<!--#include file="head.asp" -->
<%
strFil = "select * from fil where id = " & ID & ""
Set RSFil= conn.Execute(strFil)
%>

<%
strMappe = "select * from filmappe where id = " & rsfil("ID") & ""
Set RSMappe= conn.Execute(strMappe)

if not instr(session("id"),rsMappe("brugerid")) <> 0 then
response.write "NOPE"
else






Dim filename
Dim shortfn
Dim mappe
'mappe =
shortfn = rsfil("filsti")
filename = server.mappath("C:\W3Sites\quitzauconstruction\intrafiles\" & shortfn)

Set objStream = Server.CreateObject("ADODB.Stream")
  objStream.Open
  Const adTypeBinary = 1
  objStream.Type = adTypeBinary
  objStream.LoadFromFile Replace(filename,"/","\") 
  Response.AddHeader "Content-Disposition", "attachment;filename=" & shortfn
  Select Case right(filename,3)
          Case "asf"
              ContentType = "video/x-ms-asf"
          Case "avi"
              ContentType = "video/avi"
          Case "doc"
              ContentType = "application/msword"
          Case "zip"
              ContentType = "application/zip"
          Case "xls"
              ContentType = "application/vnd.ms-excel"
          Case "gif"
              ContentType = "image/gif"
          Case "jpg", "jpeg"
              ContentType = "image/jpeg"
          Case "wav"
              ContentType = "audio/wav"
          Case "mp3"
              ContentType = "audio/mpeg3"
          Case "mpg", "mpeg"
              ContentType = "video/mpeg"
          Case "rtf"
              ContentType = "application/rtf"
          Case "htm", "html"
              ContentType = "text/html"
          Case "asp"
              ContentType = "text/asp"
          Case Else
              'Handle All Other Files
              ContentType = "application/octet-stream"
  End Select

  Response.ContentType = ContentType

 
  Response.BinaryWrite objStream.Read





end if
%>
Avatar billede nielle Nybegynder
20. februar 2006 - 18:11 #1
Hvorfor ikke bare:

filename = "C:\W3Sites\quitzauconstruction\intrafiles\" & shortfn
Avatar billede lund_dk Praktikant
20. februar 2006 - 18:18 #2
Gør ikke en forskel, stadig fejl..
Avatar billede nielle Nybegynder
20. februar 2006 - 18:21 #3
I hvert fald ikke den samme fejl. Hvilken?
Avatar billede lund_dk Praktikant
20. februar 2006 - 18:25 #4
ADODB.Stream error '800a0bba'

File could not be opened.

/intra/getfile.asp, line 32


Linie 32 er:
objStream.LoadFromFile Replace(filename,"/","\")
Avatar billede nielle Nybegynder
20. februar 2006 - 18:39 #5
1) Er du helt sikker på at der faktisk ligger en fil som har stien:

"C:\W3Sites\quitzauconstruction\intrafiles\" & shortfn

2) Hvis der gør, ved du som om dit ASP.NET program har privilegier til at læse den?

Fejlbeskeden 800a0bba betyder nemlig at programmet ikke kunne åbne filen.
Avatar billede lund_dk Praktikant
20. februar 2006 - 18:46 #6
Og ellers  nogen som har et andet script hvor jeg kan få det til at lykkedes?
Avatar billede lund_dk Praktikant
20. februar 2006 - 18:48 #7
Nu har jeg skrevet en direkte sti til en bestemt fil, for at være sikker på at jeg har fat i en fil der eksiterer.
filename = "C:\W3Sites\quitzauconstruction\intrafiles\home-icon.gif"


Her får jeg denne fejl:
Response object error 'ASP 0156 : 80004005'

Header Error

/intra/getfile.asp, line 34

The HTTP headers are already written to the client browser. Any HTTP header modifications must be made before writing page content.



Linie 34 er:
Response.AddHeader "Content-Disposition", "attachment;filename=" & shortfn
Avatar billede nielle Nybegynder
20. februar 2006 - 18:56 #8
Det lyder jo som om at filen:

"C:\W3Sites\quitzauconstruction\intrafiles\" & shortfn

- slet ikke eksistere. Så det forklare 800a0bba fejlen. :^)

Mht. den nye fejl (80004005), så skyldes den at du må have skrevet et eller andet ud til skærmen før din linje 34. Når du udkriver en header, må der ikke have været skrevet noget som helt ud andet end andre headere.
Avatar billede lund_dk Praktikant
21. februar 2006 - 09:55 #9
Det kører nu. Tak for hjælpen.
Avatar billede nielle Nybegynder
21. februar 2006 - 16:21 #10
My pleasure :^)
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