webForumDet fria alternativet

ADODB.Stream som funkar ibland

ASP

9 svar · 771 visningar · startad av MickeA.com

Medlem sedan feb. 20034 441 inlägg
Frågan#1

Hej,

Har inte suttit med ASP på flera år, men måste fixa en sak och har kört fast lite.

Jag ska:

  • Skapa en .txt fil på servern
  • Fylla den med info från en databas
  • Öppna ett stream objekt
  • Läsa in filen och skicka till webbläsaren
  • Ta bort filen

Så här har jag gjort:

<%
Dim fso, MyFile
Dim filename, filepath

Dim objStream

filepath = Server.MapPath(".") & "\_export\"
filename = "test.csv"

Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile(filepath & filename, True)
MyFile.WriteLine("This is a test.")
MyFile.Close : Set fso = Nothing

Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Type = 1
objStream.Open() 
objStream.loadFromFile(filepath & filename)

response.addheader "Content-Disposition", "attachment; filename=""" & filename & ".csv"""
response.addheader "Pragma", "no-cache"

Response.ContentType = "text/csv"
				
Response.BinaryWrite(objStream.Read())

objStream.close : objStream = Nothing	
conn.close : Set conn = Nothing
%>

Det funkade de första 10 gångerna jag provkörde, filen skapades och innehållde texten ovan.

Men nu händer inget alls, filen laddas, men sidan blir vit, inget mer händer, det bra blinkar till.

Får heller inga felmeddelanden.

Jag ska skicka filen som en nedladdningsbar fil till webbläsaren, är det här rätt väg att gå?

Har sökt lite på ADODB både här och på google, men det mesta verkar handla om .NET idag.

/red Filen skapas på servern, men skickas aldrig till webbläsaren.

Medlem sedan mars 20041 505 inlägg
#2

Kör sidan genom någon sniffer, tex. http://web-sniffer.net
Fråga: varför skapar du ens en textfil? Kan du inte bara spotta ut datat direkt och skippa omvägen med fso?

Medlem sedan feb. 20034 441 inlägg
#3

Troxy skrev:

varför skapar du ens en textfil? Kan du inte bara spotta ut datat direkt och skippa omvägen med fso?

Absolut kan jag göra det, men har glömt bort nästa all ASP så är lite osäker på hur det ska se ut.

Jag ska generea listor med ~4000 poster, det påverkar inte prestandan negativt att skriva direkt till en stream?

Vore fint med lite kodhjälp så jag har något att börja med.

Tack,

Medlem sedan feb. 20034 441 inlägg
#4

Troxy skrev:

Kör sidan genom någon sniffer, tex. http://web-sniffer.net

Skumt, när jag kör sidan genom den så funkar det fint:

HTTP Status Code: HTTP/1.1 200 OK

Men när jag kör filen i Firefox i en annan flik, står den bara och laddar och inget händer överhuvudtaget.

Medlem sedan maj 2009250 inlägg
#5

jag skulle personligen "lägga in"/"smälta in" .aspx sidor på denna gamla applikation istället och vidare utveckla de funktioner som skall till på det viset .... kan IIS:en på denna maskin ej köra .Net ?

Medlem sedan feb. 20034 441 inlägg
#6

johaseo skrev:

jag skulle personligen "lägga in"/"smälta in" .aspx sidor på denna gamla applikation istället och vidare utveckla de funktioner som skall till på det viset .... kan IIS:en på denna maskin ej köra .Net ?

Jo visst, den ligger hos Binero så det går alldeles ypperligt. Har inte en aning om hur det här ska lösas, men jag behöver ansluta till databasen, hämta data, skriva till en stream och skicka CSV till webbläsaren.

Har du någon exempelkod/länkar som kan knuffa igång mig?

Medlem sedan mars 20041 505 inlägg
#7

Vad är det för data du försöker skriva ut? Är det simpel text i csv-format?

Medlem sedan feb. 20034 441 inlägg
#8

Troxy skrev:

Vad är det för data du försöker skriva ut? Är det simpel text i csv-format?

Ja, det är en tabseparerad csvfil som ska se ut såhär:

USERNAME     FIRSTNAME    LASTNAME    EMAILADDRESS
mylogin      myfirst      mylast      myemail
mylogin      myfirst      mylast      myemail
mylogin      myfirst      mylast      myemail
mylogin      myfirst      mylast      myemail
Medlem sedan mars 20041 505 inlägg
#9
CsvData = ...........

Response.Clear
Response.AddHeader "Content-Type", "application/octet-stream"
Response.AddHeader "Content-Length", Len(CsvData)
Response.AddHeader "Content-Disposition", "attachment; filename=""Data.csv"""
Response.Write CsvData
Response.End
Medlem sedan feb. 20034 441 inlägg
#10

Tack ska du ha!

264 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)