2010-12-20 3 views
0

Ich habe versucht, zwei diferent Codes ist dies ein:Fehler im Code zum Herunterladen einer Datei (txt) in clasic ASP

nombre="Prueba.txt" 
set stream = Server.CreateObject("ADODB.Stream") 
stream.Open 
stream.Type = 2 ' binary 
stream.LoadFromFile(Server.MapPath("./File/"&nombre)) 
Response.BinaryWrite(stream.Read) 

Und der andere Code Ich versuche, ist dies:

Response.ContentType = "application/x-unknown" ' arbitrary 

FPath = Server.MapPath("./File/"&nombre) 
Response.AddHeader "Content-Disposition","attachment; filename=" & nombre 

Set adoStream = CreateObject("ADODB.Stream") 
adoStream.Open() 
adoStream.Type = 1 
adoStream.LoadFromFile(FPath) 
Response.BinaryWrite adoStream.Read() 
adoStream.Close 
Set adoStream = Nothing 

Response.End 

Und ich bekomme, dass es einen nicht spezifizierten/definierten Datentyp gefunden hat.

+0

Haben Sie eine txt oder jpg herunterladen? (Der Titel weicht vom Dateinamen ab) –

+0

Ich brauche einen Txt, mein Fehler –

Antwort

2

@Giancarlo Solarino: Versuchen Sie, diese -

Option Explicit 

Dim sFileName, sFilePath, iFileSize 
Dim oFile, oFS, oStream 

sFileName = "Prueba.txt" 
sFilePath = Server.MapPath("File/" & sFileName) 

Set oFS = Server.CreateObject("Scripting.FileSystemObject") 

If oFS.FileExists(sFilePath) Then 
    Set oFile = oFS.GetFile(sFilePath) 
    iFileSize = oFile.Size 
    Set oFile = Nothing 

    Response.AddHeader "Content-Disposition","attachment; filename=" & sFileName 
    Response.ContentType = "application/download" 
    Response.AddHeader "Content-Length", iFileSize 

    Set oStream = Server.CreateObject("ADODB.Stream") 
    oStream.Open 
    oStream.Type = 1 
    oStream.LoadFromFile sFilePath 

    Do While NOT oStream.EOS AND Response.IsClientConnected 
     Response.BinaryWrite oStream.Read(1024) 
     Response.Flush() 
    Loop 

    oStream.Close 
    Set oStream = Nothing 
End If 
+1

In meinem Fall musste ich die Position des Stream-Objekts vor dem Lesen zurücksetzen: oStream.Position = 0 (vor der While-Schleife) – Dubs

0

Ich habe etwas Arbeitscode, das ist ziemlich das Gleiche, aber ich benutze ContentType = "image/jpeg" und Response.Flush am Ende.

Const adTypeBinary = 1 

dim strFileName 
strFileName = "archivo.jpg" 

dim strFilePath 
strFilePath = "C:\temp\" + strFileName 

dim objStream 
Set objStream = Server.CreateObject("ADODB.Stream") 
objStream.Open 
objStream.Type = adTypeBinary 
objStream.LoadFromFile strFilePath 

Response.AddHeader "Content-Disposition", "attachment; filename=" & strFileName 
Response.Charset = "UTF-8" 
Response.ContentType = "image/jpeg" 

Response.BinaryWrite objStream.Read 
Response.Flush 
+0

Es hat gut funktioniert, aber die Sache ist, dass statt Öffnen eines Dialogfeldes zum Herunterladen der Datei ot die .txt im Browser öffnet. Sie haben eine Idee, wie ich ein Dialogfeld bekommen kann ?? Vielen Dank. –

+0

Angeblich 'Response.AddHeader" Content-Disposition "," attachment; filename = "& strFileName' erzwingt die Anzeige des Downloaddialogs, aber es hängt vom Browser und der Benutzerkonfiguration ab. Es ist das Beste, was du tun kannst. –

Verwandte Themen