ROTINA PARA BAIXAR UM ARQUIVO BAIXA APENAS 266B

JMASCIOLI 20/07/2011 14:17:14
#379607
pessoal, novamente preciso de ajuda.
Tenho uma rotina em asp para procurar um arquivo e assim que encontrado, exibir um link para download.
Tudo funcionando ok.
Mas quando clico para baixar o arquivo, vem apenas 266Bytes quando o arquivlo tem na realidade mais de 6K.
Qualquer arquivo vem com 266bytes.
Por favor pessoal, isso é meio urgente.
Obrigado a todos....
Segue o código.


[txt-color=#0000f0]<%@ Language=[Ô]VbScript[Ô]%>
<HTML>
<HEAD>
<TITLE>ASPWizard 1.1D / Folder Search (Your Title)</TITLE>
</HEAD>

<BODY bgColor=[Ô]#FFFFFF[Ô] Background=[Ô][Ô]>
<%
Dim Coloralt [ô] We define the color variable
If Request.Querystring([Ô]results[Ô]) = [Ô][Ô] Then
%>

<Center><H1><Font Color=[Ô]#000000[Ô]>ASPWizard 1.1D / Folder Search (Your Title)</Font></H1></Center>
<FORM action=[Ô]cadastro_BFS.asp?results=results[Ô] target=[Ô]main_view[Ô] method=[Ô]post[Ô] Name=[Ô]DaForm[Ô] >
<Input Type=[Ô]text[Ô] size=[Ô]30[Ô] Name=[Ô]Criteria[Ô]>
<Input Type=[Ô]submit[Ô] Name=[Ô]B1[Ô] class=[Ô]buttons[Ô] value=[Ô]Search[Ô]>
<Input Type=[Ô]reset[Ô] Name=[Ô]B2[Ô] class=[Ô]buttons[Ô] value=[Ô]Clear[Ô]>
</FORM>

<Table Border=[Ô]1[Ô] Cellpadding=[Ô]0[Ô] Cellspacing=[Ô]0[Ô] Width=[Ô]98%[Ô]>
<TR align=[Ô]Center[Ô] bgcolor=[Ô]silver[Ô]>
<TD Width=[Ô]50%[Ô]><Font Face=[Ô]Arial[Ô] Color=[Ô]#000000[Ô]>Arquivo</Font></TD>
<TD Width=[Ô]16%[Ô]><Font Face=[Ô]Arial[Ô] Color=[Ô]#000000[Ô]>Data Criação</Font></TD>
<TD Width=[Ô]16%[Ô]><Font Face=[Ô]Arial[Ô] Color=[Ô]#000000[Ô]>Last Modified</Font></TD>
<TD Width=[Ô]16%[Ô]><Font Face=[Ô]Arial[Ô] Color=[Ô]#000000[Ô]>Tamanho</Font></TD>
</TR>
</TABLE>
<!-- The IFRAME Starts here -->
<IFRAME name=[Ô]main_view[Ô] src=[Ô][Ô] width=[Ô]100%[Ô] height=[Ô]300[Ô] marginwidth=[Ô]0[Ô] marginheight=[Ô]0[Ô]></IFRAME>
<!-- The IFRAME ends here -->
<%
Else
[ô] We start the if statement that checks if there is a criteria...
If Request.Form([Ô]Criteria[Ô]) = [Ô][Ô] Then
Response.Write([Ô]<H2 align=[Ô][Ô]center[Ô][Ô]>é preciso informar a chave para a pesquisa!</H2>[Ô])
Else

Dim objFolder
Dim strSearchText
Dim objFSO

strSearchText = Request.Form([Ô]Criteria[Ô])

[ô] We Create the FSO and Folder objects
Set fso = Server.CreateObject([Ô]Scripting.FileSystemObject[Ô])
Set objFSO = Server.CreateObject([Ô]Scripting.FileSystemObject[Ô])
[ô] We define the Folder to Search
Set objFolder = objFSO.GetFolder([Ô]local no servidor[Ô])

Search objFolder

Function Search(ByVal objFolder)
Dim objSubFolder

session([Ô]intMatch[Ô]) = 0

[ô]Loop through every file in the current folder
For Each objFile in objFolder.Files

Set objTextStream = objFSO.OpenTextFile(objFile.Path,1)

[ô]Read the file[ô]s contents into avariable
strFileContents = objTextStream.ReadAll

[ô]if the search string is in the file, then write a link to the file
If InStr(1, strFileContents, strSearchText, 1) then

Response.Write([Ô]<Table Border=[Ô][Ô]0[Ô][Ô] Cellpadding=[Ô][Ô]0[Ô][Ô] Cellspacing=[Ô][Ô]1[Ô][Ô] Align=[Ô][Ô]Center[Ô][Ô] BorderColor=[Ô][Ô]#000000[Ô][Ô] Background=[Ô][Ô][Ô][Ô] Width=[Ô][Ô]100%[Ô][Ô]> [Ô]) & vbcrlf
Response.Write([Ô] <TR>[Ô]) & vbcrlf
Response.Write [Ô] <TD Width=[Ô][Ô]50%[Ô][Ô] BGCOLOR=[Ô][Ô][Ô] & Coloralt & [Ô][Ô][Ô]><Font Face=[Ô][Ô]Arial[Ô][Ô] Color=[Ô][Ô]#000000[Ô][Ô]><A HREF=http://[Ô]&request.servervariables([Ô]SERVER_NAME[Ô])&[Ô]/upload/Nfe/Busca.asp?sit=D&arq=[Ô] & objFile.Name & [Ô]>[Ô] & objFile.Name & [Ô]</A></TD><TD Width=[Ô][Ô]16%[Ô][Ô] BGCOLOR=[Ô][Ô][Ô] & Coloralt & [Ô][Ô][Ô]><Font Face=[Ô][Ô]Arial[Ô][Ô] Color=[Ô][Ô]#000000[Ô][Ô]>[Ô] & objFile.datecreated & [Ô]</TD><TD Width=[Ô][Ô]16%[Ô][Ô] BGCOLOR=[Ô][Ô][Ô] & Coloralt & [Ô][Ô][Ô]><Font Face=[Ô][Ô]Arial[Ô][Ô] Color=[Ô][Ô]#000000[Ô][Ô]>[Ô] & objFile.DateLastModified & [Ô]</TD><TD Width=[Ô][Ô]16%[Ô][Ô] BGCOLOR=[Ô][Ô][Ô] & Coloralt & [Ô][Ô][Ô]><Font Face=[Ô][Ô]Arial[Ô][Ô] Color=[Ô][Ô]#000000[Ô][Ô]>[Ô] & formatnumber(objFile.size,0) & [Ô]kb[Ô] & [Ô]</TD>[Ô] & vbcrlf
Response.Write([Ô] </TR>[Ô])& vbcrlf
Response.Write([Ô]</Table>[Ô])& vbcrlf

[ô] Alternando as cores
If Coloralt=[Ô]ECFDFF[Ô] Then
Coloralt=[Ô]CEE7FF[Ô]
Else
Coloralt=[Ô]ECFDFF[Ô]
End If

bolFileFound = True
session([Ô]intMatch[Ô]) = session([Ô]intMatch[Ô]) + 1
End If

objTextStream.Close
Next

[ô]Here[ô]s the recursion part - for each subfolder in this directory, we run the
[ô]Search function again
For Each objSubFolder in objFolder.SubFolders
Search objSubFolder
Next

[ô] We close our Objects so that we do not make the server work too hard
Set fso = Nothing
Set objFSO = Nothing
Set objFolder = Nothing
Set objTextStream = Nothing

End Function

If session([Ô]intMatch[Ô]) = 0 Then
Response.Write([Ô]<Center><b>Nenhum arquivo encontrado com a chave informada.</b></Center>[Ô])
End If

End If

End If

if request.QueryString([Ô]sit[Ô]) = [Ô]D[Ô] then
[ô]Passando o nome do arquivo no FORM
Dim Arquivo
Arquivo = Trim(Request.QueryString([Ô]arq[Ô]))
[ô] response.Write arquivo & [Ô] - [Ô] & Server.MapPath([Ô]\Upload\arquivos\[Ô] & Arquivo)
[ô] response.End()
Response.Clear()
Response.AddHeader [Ô]Content-Type[Ô],[Ô]application/x-msdownload[Ô]
Response.AddHeader [Ô]Content-Disposition[Ô],[Ô]attachment; filename=[Ô] & Arquivo
Response.Flush
Set objStream = Server.CreateObject([Ô]ADODB.Stream[Ô])
objStream.Open
objStream.Type = 1
objStream.LoadFromFile Server.MapPath([Ô]\Nfe\[Ô] & Arquivo)
Response.BinaryWrite objStream.Read
objStream.Close
Set objStream = Nothing
Response.Flush
response.Write Server.MapPath([Ô]\Nfe\[Ô] & Arquivo)
response.End()
end if
%>
</BODY>
</HTML>[/txt-color]
PROFESSOR 24/10/2011 20:34:02
#387623
Resposta escolhida
Parece quase tudo em ordem. Só não foram identificados o tamanho do arquivo, tanto no Response quanto na leitura. Como se trata de um arquivo, você precisa de um Stream para gerar um fluxo de dados que possa ser gravado desde a orígem, no site, até a máquina-cliente. Nesse ponto, o conteúdo do Response deve ser configurado para Attachment (ou para o mime type do arquivo), o stream deve enviar o fluxo em partes e lembre-se sempre que, ao término, devemos fechar o stream.
Tente algumas alterações. Por exemplo:

...
if request.QueryString([Ô]sit[Ô]) = [Ô]D[Ô] then
Dim Arquivo [ô]Mantém o nome do arquivo
Dim tamanho [ô]Mantém o tamanho do arquivo
Arquivo = Trim(Request.QueryString([Ô]arq[Ô]))
[ô]Criar o objeto FileSystemsObjects para ler o arquivo
Set objFSO = Server.CreateObject([Ô]Scripting.FileSystemObject[Ô])
If objFSO.FileExists(Arquivo) Then [ô]Opa, encontrou o arquivo.
Set objFile = objFSO.GetFile(Arquivo) [ô]Aberto.
tamanho = objFile.Size [ô]Este é o tamanho do arquivo.
Set objFile = Nothing [ô]Não precisamos mais do FSO.
Response.AddHeader [Ô]Content-Disposition[Ô],[Ô]attachment; filename=[Ô] & Arquivo & [Ô][Ô] [ô]Informamos ao response o nome do anexo.
Response.ContentType = [Ô]application/x-msdownload[Ô] [ô]Informamos agora o tipo de anexo.
Response.AddHeader [Ô]Content-Length[Ô], intFileSize [ô]E finalmente, informamos o tamanho do anexo.
[ô]Vamos abrir de verdade o arquivo:
Set objStream = Server.CreateObject([Ô]ADODB.Stream[Ô])
objStream.Open
objStream.Type = 1 [ô]adTypeBinary, ou seja, o arquivo é binário.
objStream.LoadFromFile Arquivo
[ô]Agora vamos criar o [Ô]fuxo[Ô] de dados, ou seja, a transferência.
Do While Not objStream.EOS And Response.IsClientConnected
Response.BinaryWrite objStream.Read(1024) [ô]Blocos de 1024, ou seja, 1K. Você pode mudar este valor, se desejar. Se mudar, recomento que seja para baixo.
Response.Flush()
Loop
objStream.Close
Set objStream = Nothing
Else
[ô]E se o arquivo não existir mais??
Response.Write [Ô]<h1>Ooops!<h1><br /></>O arquivo [Ô] + Arquivo + [Ô] não existe!</p>[Ô]
End If
End If
...
JMASCIOLI 25/10/2011 08:07:12
#387659
Muito obrigado Professo, deu certo!
Abraços...
Tópico encerrado , respostas não são mais permitidas