Ir para conteúdo
Fórum Script Brasil
  • 0

[Erro] Forçando Downloads


Martinsrj

Pergunta

Estou tentando aplicar um código que quando o usuario clicar no link o arquivo não abra no navegador e obrigue o usuario a realizar o downloads.

Erro abaixo:

ADODB.Stream error '800a0bba'

File could not be opened.

/exemplo/html/teste/sistema/bac54_arqareadocliente.asp, line 339

----------------------------------------------------------------------------------------------------

A linha 339 é essa: objStream.LoadFromFile strFilePath

Segue o código abaixo:

<td valign="middle">                            
                
                <a href="BAC54_arqareadocliente.asp?nomeArq=<%=rs.fields("nome_orig")%>&arquivo=<%=rs.fields("nome")%>"><%=rs.fields("nome_orig")%></a>   
        
            </td>
                    
            <td>
                <% 
                'cria o objeto Scripting.FileSystemObject e atribui a variável objFSO
                Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
                
                'pega o caminho e características da pasta "documentos" e atribui a objFolder
                Set objFolder = objFSO.GetFolder(Server.MapPath("documentos"))
                
                'Escreve no navegador o caminho completo da pasta (Ex: E:\inetpub\wwwdata\exemplo\html\Teste\sistema\documentos
                'Response.write objFolder.Path
                
                'Response.Write objFolder.Size & "em byte" 'Retorna o tamanho total da pasta, incluindo todos os seus arquivos.
                Set fc = objFolder.Files
                totalArq = fc.count
                
                tamArq = Server.MapPath (".") & "\" & objFolder.Name 
                'Response.Write(tamArq)
                Set arqObj = objFSO.GetFile(tamArq&"\"&rs.fields("nome"))
                'Response.Write round(arqObj.Size / 1024) & " KB"
                'varDataUacesso = varDataUacesso & arqObj.DateLastAccessed
                
                'imprimo o nome do arquivo.
                'Response.write arqObj.Name
                'Response.write objFolder.Name &"\"& arqObj.Name
                
                
                                
                '--------------------------------------------
                Response.Buffer = True
                Dim strFilePath, strFileSize, strFileName
                
                Const adTypeBinary = 2
                
                'strFilePath = "C:\ whatever the path is "
                strFilePath = objFolder.Path
                'strFileSize = ... the size of file .. optional
                strFileName = arqObj.Name
                
                Response.Clear
                
                '8*******************************8
                ' Requires MDAC 2.5 to be stable
                ' I recommend MDAC 2.6 or 2.7
                '8*******************************8
                Set objStream = Server.CreateObject("ADODB.Stream")
                objStream.Open
                'objStream.Type = adTypeBinary
                objStream.LoadFromFile strFilePath
                
                strFileType = lcase(Right(strFileName, 4))
                
                ' Feel Free to Add Your Own Content-Types Here
                Select Case strFileType
                Case ".asf"
                ContentType = "video/x-ms-asf"
                Case ".avi"
                ContentType = "video/avi"
                Case ".doc"
                ContentType = "application/msword"
                Case ".zip"
                ContentType = "application/zip"
                Case ".xls"
                ContentType = "application/vnd.ms-excel"
                Case ".gif"
                ContentType = "image/gif"
                Case ".jpg", "jpeg"
                ContentType = "image/jpeg"
                Case ".wav"
                ContentType = "audio/wav"
                Case ".mp3"
                ContentType = "audio/mpeg3"
                Case ".mpg", "mpeg"
                ContentType = "video/mpeg"
                Case ".rtf"
                ContentType = "application/rtf"
                Case ".htm", "html"
                ContentType = "text/html"
                Case ".asp"
                ContentType = "text/asp"
                Case Else
                'Handle All Other Files
                ContentType = "application/octet-stream"
                End Select
                
                
                'Response.AddHeader "Content-Disposition", "attachment; filename= strFileName
                Response.AddHeader "Content-Length", strFileSize
                ' In a Perfect World, Your Client would also have UTF-8 as the default 
                ' In Their Browser
                Response.Charset = "UTF-8"
                Response.ContentType = ContentType
                
                Response.BinaryWrite objStream.Read
                Response.Flush
                
                objStream.Close
                Set objStream = Nothing

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Olá pessoal, bom dia!

Consegui resolver a situação em parte. Consigo realizar o download das extensões DOC, XLS, porem as extensões ppt, pptm continua dando erro, pois além de não abrir no browser não permite o downloads.

SEGUE abaixo o código atualizado:

'o link abaixo é o responsavel para direcionar para o arquivo desejado

<a href='documentos/<%=rs.fields("nome")%>?arquivo=<%=rs.fields("nome")%>' target="_blank"><%=rs.fields("nome_orig")%></a>

</td>

<td>

<%

'29/01/2010 - atenção, a variavel arquivo declarado no link acima não recebe o nome do arquivo

'Response.Write arquivo & "Imprimindo o arquivo"

'Response.End()

'cria o objeto Scripting.FileSystemObject e atribui a variável objFSO

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

'pega o caminho e características da pasta "documentos" e atribui a objFolder

Set objFolder = objFSO.GetFolder(Server.MapPath("documentos"))

'Escreve no navegador o caminho completo da pasta (Ex: E:\inetpub\wwwdata\background\html\Teste\sistema\documentos

'Response.write objFolder.Path

'Response.Write objFolder.Size & "em byte" 'Retorna o tamanho total da pasta, incluindo todos os seus arquivos.

Set fc = objFolder.Files

totalArq = fc.count

tamArq = Server.MapPath (".") & "\" & objFolder.Name

'Response.Write(tamArq)

Set arqObj = objFSO.GetFile(tamArq&"\"&rs.fields("nome"))

'Response.Write round(arqObj.Size / 1024) & " KB"

'varDataUacesso = varDataUacesso & arqObj.DateLastAccessed

'imprimo o nome do arquivo.

'Response.write arqObj.Name

'Response.write objFolder.Name &"\"& arqObj.Name

if Request("arquivo") <> "" then

'--------------------------------------------------------------------------

Response.Buffer = True

Dim strFilePath, strFileSize, strFileName

Const adTypeBinary = 2

'strFilePath = "C:\ whatever the path is "

strFilePath = objFolder.Path

'strFileSize = ... the size of file .. optional

strFileName = arqObj.Name

Response.Clear

'8*******************************8

' Requires MDAC 2.5 to be stable

' I recommend MDAC 2.6 or 2.7

'8*******************************8

'Response.AddHeader "Content-Type","application/x-msdownload"

Response.AddHeader "Content-Disposition","attachment; filename="&rs.fields("nome_orig")

Set objStream = Server.CreateObject("ADODB.Stream")

objStream.Open

'objStream.Type = adTypeBinary

' Response.Write arquivo & "Imprimindo o arquivo"

' Response.End()

objStream.LoadFromFile strFilePath

strFileType = lcase(Right(strFileName, 4))

' Feel Free to Add Your Own Content-Types Here

Select Case strFileType

Case ".asf"

ContentType = "video/x-ms-asf"

Case ".avi"

ContentType = "video/avi"

Case ".doc"

ContentType = "application/msword"

case ".ppt", ".pps",".pptm"

'ContentType = "application/mspowerpoint"

'ContentType = "application/vnd.ms-powerpoint"

ContentType = "application/x-powerpoint"

'Informação sobre forçar o downloads em arquivo .txt

'http://www.plugmasters.com.br/forum/lofiversion/index.php/t8047.html

Case ".txt"

ContentType = "text/plain"

Case ".zip"

ContentType = "application/zip"

Case ".xls"

ContentType = "application/vnd.ms-excel"

Case ".gif"

ContentType = "image/gif"

Case ".jpg", "jpeg"

ContentType = "image/jpeg"

Case ".wav"

ContentType = "audio/wav"

Case ".mp3"

ContentType = "audio/mpeg3"

Case ".mpg", "mpeg"

ContentType = "video/mpeg"

Case ".rtf"

ContentType = "application/rtf"

Case ".htm", "html"

ContentType = "text/html"

Case ".asp"

ContentType = "text/asp"

Case ".pdf"

ContentType = "application/pdf"

Case Else

'Handle All Other Files

ContentType = "application/octet-stream"

End Select

'Response.AddHeader("Content-type: Application/Octet-stream")

'Response.AddHeader "Content-Disposition", "attachment; filename="& rs.fields("nome_orig")

Response.AddHeader "Content-Length", strFileSize

' In a Perfect World, Your Client would also have UTF-8 as the default

' In Their Browser

Response.Charset = "UTF-8"

Response.ContentType = ContentType

Response.BinaryWrite objStream.Read

Response.Flush

objStream.Close

Set objStream = Nothing

'------------------------------------------------------------------------------

End if

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...