Avatar billede ras2000 Nybegynder
18. september 2001 - 11:59 Der er 19 kommentarer og
1 løsning

Nogen der kender denne: CreateObject(\"SoftArtisans.FileManager\")?

Jeg fandt på et tidspunkt en stump kode herinde, som skulle tvinge en fil til at downloades, og jeg fik den til at virke på min server/computer (nt4/win2000) Nu står jeg og skal bruge den, og så kan jeg ikke få det til at virke. Så vidt jeg kan se, skal jeg have noget software fra softartisans, men det synes jeg ikke jeg skulle da jeg sidst prøvede det. Den fulde kode kommer her:
<%

Response.Expires = 0
Response.Buffer = TRUE

picName    = request.querystring(\"picName\")
path    = \"./\" \' sti til dine billeder

Set uAgent = Request.ServerVariables(\"HTTP_USER_AGENT\")
if (inStr(uAgent, \"IE\")) Then
      \' Explorer
      Response.ContentType = \"m_type\"
      Response.AddHeader \"Content-Disposition\", \"atachment; filename=\"& picName
Else
      \' NetScape
      Response.ContentType = \"application/octet-stream\"
      Response.AddHeader \"Content-Disposition\", \"attachment; filename=\"& chr(34) & picName & chr(34)
End if

Dim oFM, oBS
Set oFM = CreateObject(\"SoftArtisans.FileManager\")
Set oBS = oFM.OpenBinaryFile(server.mappath(path&picName))

Response.BinaryWrite oBS.ReadAll

Set oBS = Nothing
Set oFM = Nothing

Response.Flush
%>
Jeg ved kun meget lidt om asp, jeg synes stadig request.querystring er ret smart.
Avatar billede giuggio97 Nybegynder
18. september 2001 - 12:29 #1
Hvis du bruge dette program, du skal installere SoftArtisans FileUpload objekt, der indeholder også FileManager.

Ellers prøv med:
Set oFM = CreateObject(\"Scripting.FileSystemObject\")


Avatar billede ras2000 Nybegynder
18. september 2001 - 12:36 #2
Jeg har lige prøvet det, der får jeg følgende fejl:
Object doesn\'t support this property or method: \'OpenBinaryFile\'
Avatar billede giuggio97 Nybegynder
18. september 2001 - 12:46 #3
Det er en skuffelse men FileSystemObject kan kun arbejde med tekst filer.
Du er nødt til at lave dit ActiveX object i Visual Basic, og objektet skal have denne funktion:

\'return an array of bytes (binary file)
Public Function GetFileBytes(ByVal FullFilePath) As Variant
    Dim ctBytes As Long
    Dim bytes() As Byte
    Dim fno As Long
   
    On Error GoTo err_GetFileBytes
   
    fno = FreeFile
    Open FullFilePath For Binary Access Read As #fno
    ctBytes = LOF(fno)
    ReDim bytes(ctBytes)
    Get #fno, , bytes
    Close #fno
   
    GetFileBytes = bytes
    Exit Function

err_GetFileBytes:
    Err.Raise vbObjectError + 100, \"Error while reading \'\" & FullFilePath & \"\'\", Err.Description
    GetFileBytes = Array(0)
    Exit Function
   
End Function

Så kan du oprette dit objekt med:

Set oFM = CreateObject(\"Project.Class\")
Response.BinaryWrite oFM.GetFileBytes(server.mappath(path&picName))
Avatar billede giuggio97 Nybegynder
18. september 2001 - 12:53 #4
Du kan også prøve med dette - men ved ikke om det fungerer:

Set oFM = CreateObject(\"Scripting.FileSystemObject\")
Set oFile = oFM.OpenTextFile(server.mappath(path&picName))
Response.BinaryWrite oFile.ReadAll
oFile.Close
set oFile = nothing
Avatar billede ras2000 Nybegynder
18. september 2001 - 12:54 #5
OK, det var en ordentlig omgang. Jeg har sandsynligvis brugt det forkert, jeg ved som sagt ikke så meget om det her. Min side ser nu sådan her ud:
<%
\'return an array of bytes (binary file)
Public Function GetFileBytes(ByVal FullFilePath) As Variant
    Dim ctBytes As Long
    Dim bytes() As Byte
    Dim fno As Long
   
    On Error GoTo err_GetFileBytes
   
    fno = FreeFile
    Open FullFilePath For Binary Access Read As #fno
    ctBytes = LOF(fno)
    ReDim bytes(ctBytes)
    Get #fno, , bytes
    Close #fno
   
    GetFileBytes = bytes
    Exit Function

err_GetFileBytes:
    Err.Raise vbObjectError + 100, \"Error while reading \'\" & FullFilePath & \"\'\", Err.Description
    GetFileBytes = Array(0)
    Exit Function
   
End Function


Set oFM = CreateObject(\"Project.Class\")
Response.BinaryWrite oFM.GetFileBytes(server.mappath(\"gif/b10a.gif\"))

%>
Og der kommer en fejlmeddelse ved første linie, hvor variablene bliver deklareret. Skal koden ligge i en seperat fil?
Avatar billede giuggio97 Nybegynder
18. september 2001 - 12:56 #6
Hvis du bruger funktionen GetFileBytes, den skal ikke direkte i asp kode.
Du skal oprette en ActiveX objekt i Visual Basic.

Men prøv min anden løsning - det er nemmere!
Avatar billede ras2000 Nybegynder
18. september 2001 - 13:02 #7
Med din anden løsning, som afgjort ser noget nemmere ud, får jeg denne lidt kryptiske besked:
GIF89a +;K[k{Ë;
Avatar billede ras2000 Nybegynder
18. september 2001 - 13:04 #8
Æh, rettelse, jeg får temmelig meget blankt ud, sammen med det jeg skrev før.
Avatar billede giuggio97 Nybegynder
18. september 2001 - 13:08 #9
Prøv med at lave et ActiveX object som beskrevet, mens jeg tester lidt anden kode...
Avatar billede ras2000 Nybegynder
18. september 2001 - 13:17 #10
Ja, det lyder jo nemt nok, men hvordan laver jeg et activeX object?
Avatar billede giuggio97 Nybegynder
18. september 2001 - 13:47 #11
Denne her er den bedste løsning, hvis du ikke har erfaring med ActiveX objekter:
Erstat din kode:

------------------
Dim oFM, oBS
Set oFM = CreateObject(\"SoftArtisans.FileManager\")
Set oBS = oFM.OpenBinaryFile(server.mappath(path&picName))

Response.BinaryWrite oBS.ReadAll

Set oBS = Nothing
Set oFM = Nothing
------------------

Med denne her:

------------------
Set objStream = CreateObject(\"ADODB.Stream\")
objStream.Open
objStream.Type = 1
objStream.LoadFromFile server.mappath(path & picName)

Response.BinaryWite objStream.Read

set objStream = nothing
------------------
Avatar billede giuggio97 Nybegynder
18. september 2001 - 13:48 #12
Husk at der er en stavefejl i linie:

Response.AddHeader \"Content-Disposition\", \"atachment; filename=\"& picName

-> attachment med to \"t\"
Avatar billede ras2000 Nybegynder
18. september 2001 - 14:05 #13
Nu ser hele min fil sådan her ud.
<%

Response.Expires = 0
Response.Buffer = TRUE

picName    = request.querystring(\"picName\")
path    = \"./\" \' sti til dine billeder

Set uAgent = Request.ServerVariables(\"HTTP_USER_AGENT\")
if (inStr(uAgent, \"IE\")) Then
      \' Explorer
      Response.ContentType = \"m_type\"
      Response.AddHeader \"Content-Disposition\", \"attachment; filename=\"& picName
Else
      \' NetScape
      Response.ContentType = \"application/octet-stream\"
      Response.AddHeader \"Content-Disposition\", \"attachment; filename=\"& chr(34) & picName & chr(34)
End if

Set objStream = CreateObject(\"ADODB.Stream\")
objStream.Open
objStream.Type = 1
objStream.LoadFromFile server.mappath(path & picName)

Response.BinaryWite objStream.Read

set objStream = nothing

Response.Flush
%>
Når jeg kører den, prøver den at gemme selve denne fil, altså asp-siden til disk. Den ser sådan her ud når jeg åbner den i notepad:

<font face=\"Arial\" size=2>
<p>Microsoft VBScript runtime </font> <font face=\"Arial\" size=2>error \'800a01ad\'</font>
<p>
<font face=\"Arial\" size=2>ActiveX component can\'t create object: \'ADODB.Stream\'</font>
<p>
<font face=\"Arial\" size=2>/detaljer/loader.asp</font><font face=\"Arial\" size=2>, line 20</font>
Avatar billede ras2000 Nybegynder
18. september 2001 - 14:08 #14
Ups, undskyld, mig der havde lavet et par fejl, såsom ikke at skrive navnet på filen. Nu downloader den filen, men men den forsøger stadig at downloade min asp side, og kommer med et vindue i explorer hvor der står Handlingen er annuleret, der kunne ikke oprettes....
Avatar billede ras2000 Nybegynder
18. september 2001 - 14:15 #15
...og filen der bliver downloadet er tom. Muligvis en fejl i stinavnet, det kan jeg ikke lige gennemskue. Min retted kode ser nu sådan her ud:
<%

Response.Expires = 0
Response.Buffer = TRUE

picName    = \"b1oa.gif\"
path    = \"./gif/\" \' sti til dine billeder

Set uAgent = Request.ServerVariables(\"HTTP_USER_AGENT\")
if (inStr(uAgent, \"IE\")) Then
      \' Explorer
      Response.ContentType = \"m_type\"
      Response.AddHeader \"Content-Disposition\", \"attachment; filename=\"& picName
Else
      \' NetScape
      Response.ContentType = \"application/octet-stream\"
      Response.AddHeader \"Content-Disposition\", \"attachment; filename=\"& chr(34) & picName & chr(34)
End if

Set objStream = CreateObject(\"ADODB.Stream\")
objStream.Open
objStream.Type = 1
objStream.LoadFromFile server.mappath(path & picName)
response.write(server.mappath(path & picName))
Response.BinaryWite objStream.Read

set objStream = nothing

Response.Flush
%>
Hvis jeg i siden skulle ligge mit billede ind ville jeg skrive <img src=\"gif/b1oa.gif\">
Avatar billede giuggio97 Nybegynder
18. september 2001 - 14:26 #16
Hvis du får en fejl i linien med CreateObject(\"ADODB.Stream\"), det betyder at du skal opgradere ADO til version 2.5 og opfra.

Du kan hente den nyere version her: http://www.microsoft.com/data/download.htm

Avatar billede ras2000 Nybegynder
18. september 2001 - 15:04 #17
På min server eller min egen maskine? Jeg bruger tit sådan en her uden problemer:
Set Conn = Server.CreateObject(\"ADODB.Connection\")
Men det har måske ikke så meget med sagen at gøre?
Løsningen skulle gerne kunne virke på alle maskiner uden problemer.
Avatar billede ras2000 Nybegynder
18. september 2001 - 15:31 #18
Nu har jeg kigget lidt på det hele en gang til. Den virker som om den downloader min asp-side, men det gær den ikke. Den downloader til gengæld en fil der hedder det den skal, men den indeholder teksten:
<font face=\"Arial\" size=2>
<p>Microsoft VBScript runtime </font> <font face=\"Arial\" size=2>error \'800a01ad\'</font>
<p>
<font face=\"Arial\" size=2>ActiveX component can\'t create object: \'ADODB.Stream\'</font>
<p>
<font face=\"Arial\" size=2>/detaljer/loader.asp</font><font face=\"Arial\" size=2>, line 20</font>
Så det er vel stadig ado der skal opgraderes.
Så mangler jeg lige at vide hvor det skal ske henne, det virker på den side du linkede til som om det er på min maskine.
Avatar billede giuggio97 Nybegynder
18. september 2001 - 15:48 #19
Kun på serveren. Husk at genstarte maskinen efter opgarderingen
Avatar billede ras2000 Nybegynder
02. oktober 2001 - 16:37 #20
Undskyld vores netværk gik ned, og da det kom op igen, havde jeg glemt denne diskussion igen.
Jeg fik det til at virke på min maskine, men det skal lægges ud på nogle servere jeg ikke har kontrol over, og der har jeg ikke kunne få det til at virke, så det blev en lidt hypotetisk diskussion. Men tak for svarene/hjælpen!
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