Avatar billede annpro Nybegynder
25. maj 2006 - 13:38 Der er 18 kommentarer og
1 løsning

Gem fil på harddisk via ASP og ActiveX

Hej

Jeg har et lille problem med eksport af en fil, jeg har ingen problmer med at få den genereret så den ligger på webserveren, men problemet kommer når jeg skal ha den gemt automatisk på "brugerens" lokale maskine.

Det er en postfil som skal gemmes på en lokal maskine i vores butik, så vores postsystem automatisk indlæser den, så det vil ikke gøre noget at det først skal sættes op på den lokale computer.

Nogen der kan hjælpe?
Avatar billede tofte Juniormester
25. maj 2006 - 13:48 #1
Hvis det var mig som skulle lave det, ville jeg lave et lille scipt evt. vbs som du så kører lokalt når du skal bruge filen. Scriptet henter så filen via en socket eller ftp, alt efter hvad du har mulighed for. Er det et krav at det skal være activeX? Og hvormeget skal brugeren være blandet ind i det? Tænker her på, om det skal ske automatisk eller om brugeren skal foretage nogle valg og filen så efterfølgende skal gemmes?
Avatar billede annpro Nybegynder
25. maj 2006 - 13:54 #2
Brugeren skal helst ikke være blandet ind i det, og jeg er næsten ligeglad med hvordan det sker, jeg har bare en fil der hedder pcpac.txt i en mappe på serveren, som skal gemmes ned i c:\post\pcpac.txt, filen på serveren lave når brugeren trykker på en knap på vores webside, lige efter klikket skulle filen så gerne gemmes ned på den lokale computer, som herefter læser den ind i post systemet (indlæsningen i post systemet sker automatisk)
Avatar billede tofte Juniormester
25. maj 2006 - 13:57 #3
har du ftp adgang til servern hvor filen ligger? Hvis ja, kan man bare lave et script som henter filen.
Avatar billede annpro Nybegynder
25. maj 2006 - 14:19 #4
ja jeg har 100% adgang til serveren hvor filen ligger, men hvordan skal scriptet se ud mm.
Avatar billede tofte Juniormester
25. maj 2006 - 14:22 #5
øjeblik, har lige noget andet der skal laves, men 20 min, så skal jeg nok lige vende tilbage.
Avatar billede nico26 Nybegynder
25. maj 2006 - 14:29 #6
ellers har jeg bikset noget sammen

http://www.daimi.au.dk/~nicolai/test.html

Det bruger AJAX til at lave et httprequest som henter filen og gemmer den på c drevet
Avatar billede nico26 Nybegynder
25. maj 2006 - 14:33 #7
mere præcist henter den http://www.daimi.au.dk/~nicolai/test.txt, og gemmer som c:\test.txt
du kan selv rette url og filnavn så det passer...
Avatar billede tofte Juniormester
25. maj 2006 - 14:53 #8
fint fint. Man skal være hurtig her i firmaet :-) Jeg venter lige med at lave noget så.
Avatar billede nico26 Nybegynder
25. maj 2006 - 14:59 #9
hvis du har et anden måde at gøre det på er jeg da også interesseret.
vi kan bare dele points - dem er jeg ligeglad med...
Avatar billede tofte Juniormester
25. maj 2006 - 15:06 #10
det er jeg såmænd også, men jeg havde forestillet mig et vbscript som henter via ftp. Det har jeg gode erfaringer med. Ulempen er bare, at man skal have kodeordet liggende lokalt
men den kan bare kaldes med de nødvendige parametre i en vbs fil og så kører det

Function GetFTP(Host, Username, Password, LocalDir, RemoteDir, GetFile)

    Dim FSO, strMode, strFile, objFile, strErrorLog, strLog

    Dim Shell, WSX, ReturnCode, Output



    ' FTP.exe application with all parameters set.

    Const COMMAND_FTP = "ftp.exe -i -s:"

   

    ' Transfer mode for the FTP, change it to your liking.

    strMode            = "ascii" '=== "ascii" / "binary"

   

    ' File that holds all commands to ftp.exe

    strFile            = LocalDir & "\ftp.txt"

   

    ' File to log any ftp.exe errors that occur

    strErrorLog        = LocalDir & "\ftpErrors.txt"

   

    ' File to log all ftp.exe actions.

    strLog            = LocalDir & "\ftpLog.txt"

   

    ' Create the FSO object.

    Set FSO = CreateObject("Scripting.FileSystemObject")

   

    ' Create a Shell object (Used to execute applications from within a script).

    Set Shell = CreateObject("WScript.Shell")



    ' If the Command file doesn't exist then create it.

    If Not FSO.FileExists(strFile) Then FSO.CreateTextFile(strFile)

   

    ' Open the command textfile as a text file for Writing/Appending.

    Set objFile = FSO.OpenTextFile(strFile, 2, True)



    ' Used to set a default object.

    ' Inside it we will add all the commands to the commandfile needed to complete the ftp download.

    With objFile

   

        ' Add host to connection too.

        .WriteLine("open " & Host)



        ' Add Username to login with

        .WriteLine(Username)

       

        ' Add Password to login with

        .WriteLine(Password)



        ' Change Localdir path if needed.

        If LocalDir <> "" Then

            .WriteLine("lcd " & LocalDir)

        End If



        ' Change RemoteDir path if needed

        If RemoteDir <> "" Then

            .WriteLine("cd " & RemoteDir)

        End If



        ' Set the Transfer Mode on the FTP.

        .WriteLine(strMode)



        ' Add a line to Get/download the wanted file.

        If GetFile <> "" Then

            .WriteLine("get " & GetFile)

        End If



        ' Exit FTP Client

        .WriteLine("bye")



        ' Close the Command textfile

        .Close()

    End With





    ' Execute the Application with the Command textfile as parameter.

    Set WSX = Shell.Exec(COMMAND_FTP & strFile)



        ' Collect ReturnCode/Errors for debugging.

        Set ReturnCode = WSX.StdErr

       

        ' Collect output from the application for debugging.

        Set Output = WSX.stdOut



        ' Put the collected ReturnCode/Errors data into a textfile

        Set objFile = FSO.OpenTextFile(strErrorLog, 2, True)

            ' Write/Append to the file.

            objFile.Write(ReturnCode.ReadAll())

            ' Close the file object

            objFile.Close()



        ' Put the collected output data into a textfile

        Set objFile = FSO.OpenTextFile(strLog, 2, True)

            ' Write/Append to the file.

            objFile.Write(Output.ReadAll())

            ' Close the file object

            objFile.Close()



        ' Release the file object.

        Set objFile = nothing



    ' Delete the Command file so it is guaranteed empty for next command input.

    FSO.DeleteFile strFile, True



    ' Release all objects.

    Set FSO = Nothing

    Set ReturnCode = Nothing

    Set Output = Nothing

    Set WSX = Nothing

End Function
Avatar billede tofte Juniormester
25. maj 2006 - 15:07 #11
hmm, lidt meget luft efter jeg kopierede filen til boksen.
Avatar billede annpro Nybegynder
25. maj 2006 - 15:32 #12
Hej nico26 det er lige nøjagtig det jeg skal bruge, men kan jeg køre det sammen med dette her, så den automatisk efter at have lavet filen kører din funktion?

<%
dim rsprod, strq
Set rsprod = Server.CreateObject("ADODB.Recordset")
strQ = "SELECT Kunde_Tabel.*, Kunde_Tabel.Kundenr FROM Kunde_Tabel WHERE (((Kunde_Tabel.Kundenr)="& knr &"));"
rsprod.Open strQ, objConn, , , adCmdText

While Not rsprod.EOF

    Set fso = CreateObject("Scripting.FileSystemObject")
    set file5 = fso.CreateTextFile(Server.MapPath("pcpac.txt"))
    'set file5 = fso.CreateTextFile(fscommand("SAVE", "c:\minfil.txt", "hej hej"))

    file5.Write(Chr(34) & oid & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & "1" & Chr(34) & "," & Chr(34) & "PPK" & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & rsprod("Kundenr") & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & knr & "/" & trans & Chr(34) & "," & Chr(34) & rsprod("Navn") & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & rsprod("Adresse") & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & rsprod("postnr") & Chr(34) & "," & Chr(34) & rsprod("By") & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & rsprod("Kundenr") & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & rsprod("Email") & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & fors & Chr(34) & "," & Chr(34) & belob & Chr(34) & "," & Chr(34) & Chr(34) & "," & Chr(34) & Oid & Chr(34) & vbCrLf )
    file5.close

rsprod.MoveNext
Wend
rsprod.Close
Set rsprod = Nothing

end if

%>
Avatar billede nico26 Nybegynder
25. maj 2006 - 15:38 #13
Det du har postet kører på serveren, og kan ikke umiddelbart aktivere det script jeg har lavet. Der må være noget html (en knap eller et link) på en af dine sider, der aktivere den kode du lige har postet. Der kan man så gå ind og kalde mit script... Håber du forstår
Avatar billede annpro Nybegynder
25. maj 2006 - 15:43 #14
ja hvordan kan jeg evt. kalde dit script uden at skulle gøre det via knappen eller et link? kan man evt i mit asp dokument lave en response.rediret over til dit dokument og derefter lavet noget onload i stedet for onclick, jeg ved godt hvordan man laver redirect men hvordan får man dit til at blive kørt automatisk når dit dokument startes op?
Avatar billede nico26 Nybegynder
25. maj 2006 - 15:48 #15
brug onload eventen i boby-tagget

<html>
...
<body onload="getFile()">
Avatar billede annpro Nybegynder
25. maj 2006 - 15:50 #16
Nico26 send lige en email til dantalkskive@dantalkskive.dk bare skriv vedr. eksperten i emne
Avatar billede annpro Nybegynder
25. maj 2006 - 15:51 #17
og lave lige en streng herinde med svar, så du kan få dine point
Avatar billede nico26 Nybegynder
25. maj 2006 - 15:55 #18
:)
Avatar billede nico26 Nybegynder
25. maj 2006 - 16:02 #19
poster lige scriptet hvis andre skulle være interesseret

<html>
<head>

<script language="javascript">
var xmlHttp

function GetXmlHttpObject(handler) {
var objXmlHttp=null
if (navigator.userAgent.indexOf("Opera")>=0)
  {
    alert("This example doesn't work in Opera")
    return 
  }
if (navigator.userAgent.indexOf("MSIE")>=0)
  {
  var strName="Msxml2.XMLHTTP"
  if (navigator.appVersion.indexOf("MSIE 5.5")>=0)
      {
      strName="Microsoft.XMLHTTP"
      }
  try
      {
      objXmlHttp=new ActiveXObject(strName)
      objXmlHttp.onreadystatechange=handler
      return objXmlHttp
      }
  catch(e)
      {
      alert("Error. Scripting for ActiveX might be disabled")
      return
      }
    }
if (navigator.userAgent.indexOf("Mozilla")>=0)
  {
  objXmlHttp=new XMLHttpRequest()
  objXmlHttp.onload=handler
  objXmlHttp.onerror=handler
  return objXmlHttp
  }
}

function getFile() {           
    var url="http://www.daimi.au.dk/~nicolai/test.txt"
    xmlHttp=GetXmlHttpObject(stateChanged)
    xmlHttp.open("GET", url , true)
    xmlHttp.send(null)
}

function stateChanged() {
  if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    f = fso.OpenTextFile("c:/test.txt", 2, true);
    f.WriteLine(xmlHttp.responseText);
    f.Close();
  }
}

</script>
</head>
<body>
  <input type="button" value="Test" onclick="getFile()">
</body>
</html>
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