29. januar 2002 - 10:24Der er
12 kommentarer og 4 løsninger
Opret fil, smid indhold i den og download
Hejsa :)
Nu skal jeg til at "lege" lidt med filobjectet. Her er hvad jeg skal have fikset:
- Når bruger klikker på en knap skal funktionen oprette en fil med extension .csv som er en ganske alm. tekst fil. - Derefter skal den smide indholdet af et recordset (loop) ind i tekstfilen - som skal kommasepareres med anførselstegn rundt om de enkelte feltværdier - Derefter skal man kunne downloade den oprettede fil - dvs. den almindelige "save file as" popup skal komme frem.
Nu har jeg ikke arbejdet med FileSystem Object før, så er der én der kan hjælpe mig i denne forbindelse? :)
Brug af AI afslører de svagheder, virksomheder allerede har opbygget gennem års cloud-transformation, nye SaaS-løsninger og fragmenterede sikkerhedssystemer.
Spørgsmålet er om min server nu understøtter FileSystemObject - har prøvet at køre følgende kode i en browser:
<% dim ObjFSO, ObjFile, DefaultDir, OverWriteFile
'Her vælger vi det direktorie hvor vi ønsker vores fil skal gemmes DefaultDir = "C:\"
'Her vælger vi om filen skal overskrives, hvis den allerede er blevet oprettet OverWriteFile = True
Set ObjFSO = CreateObject("Scripting.FileSystemObject") Set ObjFile = ObjFSO.CreateTextFile(DefaultDir & "testfilepalle.csv", OverWriteFile) ObjFile.WriteLine("Du har nu lavet din første txt fil via ASP") ObjFile.WriteLine("Var det ikke nemt?") ObjFile.Close
Set ObjFile = Nothing Set ObjFSO = Nothing
%>
Den laver dog ingen fil - siden forbliver blank, hvilket den jo sikkert skal - men ingen fil nogensteder....
ok den kommer så med "permission denied" så jeg skal nok snakke lidt med sysadm. Men er det ikke muligt at lave en temp "fil", dvs. ikke nødvendig oprette filen på serveren, men generere indholdet af den og derefter lade brugeren downloade det generedede (i form at en *.csv fil) ?
'Danner kommafilen ud fra kundenr filEfternavn = ".kom"
'Find et filnavn Set objFSO = Server.CreateObject("Scripting.FileSystemObject") fileName = Session("Kundenr")&filEfternavn
i = 1
do while objFSO.FileExists(Server.MapPath("./concorde/"&fileName)) fileName = Session("Kundenr")&"("&i&")"&filEfternavn i = i + 1 loop
Set objTextStream = objFSO.CreateTextFile(Server.MapPath("./concorde/"&fileName))
'indsætter i DB sql = "INSERT INTO Data (Kundenr_id,Sys_dato,Kom_fil) VALUES ("&"'"&Request.Form("kundenr")&"', '"&date&"', '"&filename&"')" Connect.Execute(sql)
'Skriver til text-filen linie for linie If Request.Form("dato1") <> "" OR Request.Form("bilag1") <> "" OR Request.Form("konto1") <> "" OR Request.Form("tekst1") <> "" Then for i = 1 to 5 outStr = Request.Form("dato" & i) & "," outStr = outStr & Request.Form("bilag" & i) & "," outStr = outStr & Request.Form("t" & i) & "," outStr = outStr & Request.Form("konto" & i) & "," outStr = outStr & Request.Form("tekst" & i) & "," outStr = outStr & Request.Form("kasse_ind" & i) & "," outStr = outStr & Request.Form("kasse_ud" & i) & "," outStr = outStr & Request.Form("bank_ind" & i) & "," outStr = outStr & Request.Form("bank_ud" & i)
If outStr <> ",,,,,,,," Then objTextStream.WriteLine outStr End if
next End if
objTextStream.Close Set objTextStream = Nothing Set objSFO = Nothing
Ok, nu fik jeg så laves skrive-rettigheder på mappen. Og min ovenstående kode fik fint oprettet en test.csv fil med det rigtige indhold.
Så drejer det sig jo bare om at hive info ud af recordsettet og lave et loop der indsætter det hele i tekst-filen.
Problemet er nu...hvordan kan man efter at filen er lavet....lave en funktion hvor filen downloades (save prompt) og DEREFTER...skal filen slettes igen?
Istedet for at lave en CSV fil, hvorfor laver du så ikke bare en rigtig xls fil? Det er slet ikke så svært! :)
Det der sker her er, at den slet ikke genererer en fil på serveren. Den laver det hele dynamisk, og sender resultatet tilbage til browseren som en ukendt type (for browseren), og du får lov til at downloade filen.
Det smarte her, er at istedet for den kommaseparerede fil, så får du et velformateret excel dokument, som du også kan ændre farver, font (bold italic osv.) og mange andre ting. Det her er den mest brugervenlige løsning, og du slipper for rod med .temp filer på serveren, og ydelsen bliver boostet betydeligt!
Fin idé - men desværre krævet funktionen at det er en .csv fil, idet der bliver brugt .csv filer til at indlæse indholdet i et specielt internt program.
Hovedproblemet her, er hvordan filen kan blive slettet automatisk, EFTER at downloaden er complete. Plus et lille tillægsspørgsmål, som meget nemt kan resultere i lidt flere point til den med det rigtige svar:
Hvordan får jeg indsat anførselstegn i text-filen?
Eks:
"25-01-2002", "500", "100422-124", "25"
Når jeg prøver at indsætte ", skriver den bare " istedet for anførselstegn.
Du kan jo gå tilbage til den med at generere filen i hukommelsen - som nævnt tidligere. Så skal filen ikke slettes. Det eneste der sker for brugeren er at der fremkommer en "gem som" - dialogboks hvor han blot skal gemme filen.
Nja...nu fik jeg det netop til at virke med at oprette filen og smide det helt præcise indhold ned i den. Men måske skulle jeg gøre brug af flere filer og "overwrite" metoden så filen bare bliver liggende, men overskrives næste gang funktionen kaldes. Finder ud af noget alternativt - mange tak for svarene :)
Da der kun er én bruger fra en virksomhed der må logge ind, kan jeg jo bare lave flere filer med virksomhedens id som filnavn - så opstår dette problem ikke. Til gengæld kræver det lidt mere plads på serveren men hva faaan :)
Det sq smart sylvester1 :) og _petrucci, der er jo ingen hindringer i at skrive en csv fil med sylvester1's løsningen.
Jeg har netop brugt denne løsning til at eksportere en tabel til csv og det fungerer fint. Med denne løsning slipper man for at gemme filer, for derefter at downloade dem og slette dem igen.
Synes godt om
Ny brugerNybegynder
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.