Upload ASP sem componentes

Como fazer upload de arquivos no ASP[bb] sem usar componentes no servidor?

  1. Baixe esse arquivo: upload.asp.zip e descompacte em seu servidor. Eu costumo deixar arquivos como esse, que só contém funções genérica, na pasta /api no servidor, de onde eu posso fazer um include virtual em todas as aplicações em que precisar.
  2. O formulário tem que ser submetido de um jeito especial, assim <form action="arquivoquerecebeopost.asp" method="post" enctype="multipart/form-data">
  3. Na página que vai receber o post, você não pode usar Request() nem Request.Form(), apenas Request.QueryString().
  4. No começo da sua página, chame a função upload_ReadRequest
  5. Onde precisar ler os valores do formulário, use uRequest("nomedocampo")
  6. Para salvar o arquivo: upload_SalvaArquivo "nome_do_campo_file", "C:\Caminho\PodeUsarServerMapPathSeQuiser\", "nomedoarquivo.jpg", "jpg". O último parâmetro é uma lista das extensões permitidas (algo como “doc,txt,rtf,pdf”.)
  7. Se quiser obter o nome do arquivo, use UploadRequest.Item("nome_do_campo_file").Item("FileName"). Vem o caminho completo, você precisa tratar a string se quiser apenas o nome. Isso não é difícil, eu costumo fazer com split.

Exemplo de código.


48 respostas para “Upload ASP sem componentes”

  1. Avatar de Everson
    Everson

    Olá, infelizmente o link de download do script não está ativo.
    Procuro a muito tempo um upload sem script. Grande abraço.

  2. Avatar de Luiz Ricardo

    Se o dono do blog permitir, segue abaixo o código pra redimensionar as imagens enquanto você envia:

    Valeu.

  3. Avatar de Luiz Ricardo

    Boa noite pessoal, primeiramente parabéns Rafael, muuuuito bom o código, faz muito tempo que procuro por uma solução como esta e graças ao seu código consegui resolver um problemaço.

    Galera, pra resolver o problema de MidB vocês tem que saber qual a versão do IIS que estão usando, em seguida vejam na internet como alterar o valor dos arquivos que podem ser enviados, no IIS 7, é muito fácil, se precisarem de ajuda pode me chamar por msn luizricardofc@msn.com.

    Este problema de MidB é pq o arquivo é muito grande para o que é permitido, eu já passei por isso e resolvi aumentando o tempo limite de script e também o tamanho do arquivo a ser enviado.

    Novamente obrigado.

  4. Avatar de André
    André

    O codigo funciona. Porém ao fazer o upload dos arquivos, os mesmos tem a extenção renomeada com um “M” no final. Tipo : “docM, txtM”.

    O que será que está acontecedo ?

  5. Avatar de Alexandre Bernanos
    Alexandre Bernanos

    Excelente código, funcionou 100%. Fiz algumas alterações que achei importante para o controle da minha empresa. Com a sua solução, resolvi o problema de incompatibilidade do software AspUpload com o Windows 64 bits, quer dizer, não preciso mais dele. Parabéns e muito sucesso.

  6. Avatar de Paulo
    Paulo

    Acho que o pessoal esta leigo demais por o codigo funciona direitinho, quero aproveitar é dizer o muito obrigado para o autor, nunca vi coisa tão simples e facil de usar. Sucesso!!!, queria saber se você tem outro que remenciona a foto automaticamente na pagina de resultado. quero dizer eu vou colocar o tamanho do quadro por exemplo 150 x 75, e a foto se ajustasse em ficar com distoção.

  7. Avatar de Mikael
    Mikael

    Alguem resolveu esse problema do MidB ???????????????????????????????

  8. Avatar de Denilson
    Denilson

    Apenas para mostrar como ficou a declaração do meu form:

  9. Avatar de Denilson
    Denilson

    Pessoal, mais uma dica. Aqui o erro parou de acontecer depois que eu coloquei valor para a propriedade method do meu form (method=”post”).

  10. Avatar de fuzdione
    fuzdione

    Olá pessoal, já realizei todos os procedimentos acima e continuo com o memso erro da maioria aí:
    Erro de tempo de execução do Microsoft VBScript erro ‘800a0005’
    Chamada de procedimento ou argumento inválido: ‘MidB’
    /comercialnorte/upload.asp, line 13

    Alguém já tem uma nova solução?
    Desde já agradeço.

  11. Avatar de Guilherme
    Guilherme

    PHP eh chato, ASP da problemas…
    larguem tudo e façam em Python!!
    “Seus problemas se acabaram-se!”

  12. Avatar de Lucinha
    Lucinha

    O meu não deu certo ainda…
    Ainda tá dando: Chamada de procedimento ou argumento inválido: ‘MidB’

  13. Avatar de Rodrigo
    Rodrigo

    Bom dia, eu encontrei a solução. O limite é do meu IIS. Reconfigurei e funcionou perfeitamente.

  14. Avatar de Rodrigo
    Rodrigo

    O meu também funcionou, porém, ele tem um limite de upload de arquivo que é por volta de 200k. Tem alguma configuração que eu possa fazer para alterar este limite?

  15. Avatar de Cesar
    Cesar

    O meu deu certinho de primeira, mas o único problema é que ele grava o texto com uma formatação estranha. tipo, quando é acento (á) por exemplo, ao invés de ele gravar á que seria o normal em HTML, ele grava “Ô… daí quando mostro ele como texto na página aparece normal, mas quando vou editar, no formulário ele aparece todo zuado.. alguém pode ajudar?

  16. Avatar de Joao Neto
    Joao Neto

    infelizmente pra mim, continua dando o erro citado acima do MidB.
    Estou desesperado, pois esta pareceu a melhor forma de fazer isso até agora e simplesmente não funciona… 🙁

  17. Avatar de skull
    skull

    eu tb copiei e colei o código e deu o mesmo erro, porem é soh inserir um “&” que resolve. a linha fica assim: if right(imagens,1) & “\” then

    Erro de compilação do Microsoft VBScript (0×800A03F9)
    ‘Then’ esperado
    /sites/pil/uploading.asp, line 108, column 19
    if right(imagens,1)”\” then

  18. Avatar de Renan

    Ae Jean..
    dei ctrl + v ai no seu código e não funcionou 🙁

    deu o seguinte erro:

    Erro de compilação do Microsoft VBScript (0x800A03F9)
    ‘Then’ esperado
    /sites/pil/uploading.asp, line 108, column 19
    if right(imagens,1)”\” then

    ai la no codigo essa linha fala q é o caminho onde vai salvar.

    obrigado!

  19. Avatar de Jean

    Ae galera… consegui como o Rafael em cima citou, mas não funcionou no server q eu uso, ai coloquei o conteudo da pagina upload.asp e funcionou perfeitamente, ficou assim:
    <%
    ‘ Author Philippe Collignon
    ‘ Email PhCollignon@email.com
    ‘ Modificado por Elcio Ferreira

    Dim UploadRequest,filename
    Set UploadRequest = CreateObject(“Scripting.Dictionary”)

    Sub BuildUploadRequest(RequestBin)
    ‘Get the boundary
    PosBeg = 1
    PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
    boundary = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
    boundaryPos = InstrB(1,RequestBin,boundary)
    ‘Get all data inside the boundaries
    Do until (boundaryPos=InstrB(RequestBin,boundary & getByteString(“–“)))
    ‘Members variable of objects are put in a dictionary object
    Dim UploadControl
    Set UploadControl = CreateObject(“Scripting.Dictionary”)
    ‘Get an object name
    Pos = InstrB(BoundaryPos,RequestBin,getByteString(“Content-Disposition”))
    Pos = InstrB(Pos,RequestBin,getByteString(“name=”))
    PosBeg = Pos+6
    PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(34)))
    Name = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
    PosFile = InstrB(BoundaryPos,RequestBin,getByteString(“filename=”))
    PosBound = InstrB(PosEnd,RequestBin,boundary)
    ‘Test if object is of file type
    If PosFile0 AND (PosFile<PosBound) Then
    ‘Get Filename, content-type and content of file
    PosBeg = PosFile + 10
    PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(34)))
    FileName = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
    ‘Add filename to dictionary object
    UploadControl.Add “FileName”, FileName
    Pos = InstrB(PosEnd,RequestBin,getByteString(“Content-Type:”))
    PosBeg = Pos+14
    PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
    ‘Add content-type to dictionary object
    ContentType = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
    UploadControl.Add “ContentType”,ContentType
    ‘Get content of object
    PosBeg = PosEnd+4
    PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
    Value = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
    Else
    ‘Get content of object
    Pos = InstrB(Pos,RequestBin,getByteString(chr(13)))
    PosBeg = Pos+4
    PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
    Value = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
    End If
    ‘Add content to dictionary object
    UploadControl.Add “Value” , Value
    ‘Add dictionary object to main dictionary
    UploadRequest.Add name, UploadControl
    ‘Loop to next object
    BoundaryPos=InstrB(BoundaryPos+LenB(boundary),RequestBin,boundary)
    Loop
    End Sub

    ‘String to byte string conversion
    Function getByteString(StringStr)
    For i = 1 to Len(StringStr)
    char = Mid(StringStr,i,1)
    getByteString = getByteString & chrB(AscB(char))
    Next
    End Function

    ‘Byte string to string conversion
    Function getString(StringBin)
    getString =””
    For intCount = 1 to LenB(StringBin)
    getString = getString & chr(AscB(MidB(StringBin,intCount,1)))
    Next
    End Function

    Function MontaTipo(strPath)
    Dim intpos
    intpos = InStrRev(strPath, “\”, Len(strPath) – 1)
    MontaTipo = Mid(strPath, intpos + 1, Len(strPath) – intpos – 1)
    End Function

    ‘Preenche o dicionário UploadRequest para que se possa
    ‘ler os campos através dele.
    Function upload_ReadRequest
    Response.Expires=0
    Response.Buffer = TRUE
    Response.Clear
    byteCount = Request.TotalBytes
    RequestBin = Request.BinaryRead(byteCount)
    BuildUploadRequest RequestBin
    End Function

    ‘Salva um arquivo por upload em caminho se for de um dos
    ‘tipos em ExtensoesPermitidas (string no formato
    ‘”jpg,jpeg,gif”)
    ‘Para salvar com o mesmo nome do envio, passe uma String
    ‘vazia para nome.
    Function upload_SalvaArquivo(Campo,Caminho,Nome,ExtensoesPermitidas)

    ‘Segurança (bastante óbvio, não?)
    EstensoesProibidas=”,exe,asp,php,sql,bat,pif,ocx,dll,aspx,shtml,”
    ExtensoesPermitidas=”,” & ExtensoesPermitidas & “,”

    ‘Onde salvar
    strPath = Caminho
    if right(strPath,1)”\” then
    strPath=strPath&”\”
    end if

    ‘Caminho original do arquivo.
    filepathname = UploadRequest.Item(Campo).Item(“FileName”)

    ‘Obtém a extensão
    For i = Len(filepathname) To 1 Step -1
    If Mid(filepathname, i, 1) = “.” Then Exit For
    Next
    extensao = Right(filepathname, Len(filepathname) – i)

    ‘Verifica se a extensão é dos tipos permitidos.
    if ExtensoesPermitidas=”,*,” then
    pode=(InStr(extensao,EstensoesProibidas)=0)
    else
    pode=(InStr(extensao,EstensoesPermitidas)>0)
    end if

    if pode then

    ‘On Error Resume Next

    value = UploadRequest.Item(Campo).Item(“Value”)

    ‘Create FileSytemObject Component
    Set ScriptObject = Server.CreateObject(“Scripting.FileSystemObject”)

    ‘Cria a pasta se ela não existir
    if not ScriptObject.FolderExists(strPath) then ScriptObject.CreateFolder(strPath)

    ‘Obtém o nome do arquivo a salvar
    filename = Nome
    if filename=”” then
    For i = Len(filepathname) To 1 Step -1
    If Mid(filepathname, i, 1) = “\” Then Exit For
    Next
    filename = Right(filepathname, Len(filepathname) – i)
    end if

    ‘Create and Write to a File (WARNING: Overwrites existing!)
    pathfilename = strPath & filename
    Set MyFile = ScriptObject.CreateTextFile(pathfilename,true)

    For i = 1 to LenB(value)
    MyFile.Write chr(AscB(MidB(value,i,1)))
    Next

    MyFile.Close

    ‘ verificar se imagem foi enviada com sucesso.
    if Err.number = 0 then
    msgEnvio=”Enviado com sucesso!”
    else
    msgEnvio=”Ocorreu um erro no envio!”
    end if
    Err.Clear
    else
    msgEnvio=”Extensão inválida!”
    end if

    upload_SalvaArquivo=msgEnvio

    end function

    function uRequest(n)
    uRequest=””
    if UploadRequest.Exists(n) then uRequest=UploadRequest.Item(n).Item(“Value”)
    end function

    %>

    Valeu Rafael.

  20. Avatar de Dogger
    Dogger

    O meu só ta funcionando no FF com o IE da erro 500
    alguém sabe o q pode ser?

  21. Avatar de Hans Jakob
    Hans Jakob

    Bom dei uma olhada o problema não serias no MIDB ? o certo não seria somente MID.

  22. Avatar de Naza

    Concordo com o Nemesis, eu ainda não resolvi o problema do upload e fico lendo post de briaga entre ASP e PHP. fica chato galera, vamos colaborar.
    Obrigado.

  23. Avatar de Nemesis

    Esse topico é para falar do UPLOAD ou da briga do ASP e PHP?

    Se você é pinguim e deseja falar mal do ASP, azar o seu.
    Se você é microsoft e deseja falar mal dos Pinguins, azar o seu.
    Portanto, favor para auxiliar a vida de pessoas que querem aprender colaborem com o seu melhor código, seja na linguagem que for, existe mercado e sevidores para todos.

    Obrigado.

  24. Avatar de Rafael Rocha

    bom, como o codigo não saiu no post anterior, mando novamente…
    — codigo do form: UPLOAD.HTM —
    <form action=”uploading.asp” method=”post” enctype=”multipart/form-data”>
    <input type=file name=”imagem”>
    <BR>
    <input type=submit>
    </form>

    — codigo q recebe o post: UPLOADING.ASP —
    <!– #include file=”upload.asp” –>
    <%
    ‘Lê o formulário
    upload_ReadRequest

    ‘Obtém nome e email
    ‘nome=uRequest(“nome”)
    ‘email=uRequest(“email”)

    ‘Obtém o nome do arquivo
    imagem = UploadRequest.Item(“imagem”).Item(“FileName”)
    splitimagem = split(imagem,”\”)

    for i = 0 to ubound(splitimagem)
    imagem = splitimagem(i)
    next

    response.write imagem

    ‘Salva o arquivo (Campo,Caminho,Nome,Extensao)
    upload_SalvaArquivo “imagem”, Server.MapPath(“./”), imagem, “jpg”
    ‘OBS: no ServerMapPath eu uso “./” para me referir à mesma pasta em que os arquivos estão.

    ‘Daqui em diante faz o que tem que fazer com o nome, email, etc…

    %>

    espero ter ajudado, qualquer dúvida entrem em contato: rafael@festlagos.com.br

    Abraços a todos!

  25. Avatar de Rafael Rocha

    olhem o codigo…
    — codigo do form: UPLOAD.HTM —

    — codigo q recebe o post: UPLOADING.ASP —

    espero ter ajudado, qualquer dúvida entrem em contato: rafael@festlagos.com.br

    Abraços a todos!

  26. Avatar de Rogério

    Como eu consigo capturar o tamanho (dimensão) da imagem para verificar se ela pode ser “upada” ?

  27. Avatar de Evandro
    Evandro

    e esse problema veio acontecer depois que eu reinstalei o iis!

  28. Avatar de Evandro
    Evandro

    putz, ninguem sabe como resolver o problema acima, não é permissao pois eu dei permissao na minha pasta e nao resolveu
    Valeu

  29. Avatar de Fernando william
    Fernando william

    E o caminho pessoal!!! ohhhhhhhh!!!!
    o ultimo ai do Ruy Says e permissao na pasta!!!!!
    OKvaleu

  30. Avatar de Ruy
    Ruy

    Ae galera,
    Alguem sabe como arrumo o erro abaixo?!

    Microsoft VBScript runtime error ‘800a0046’

    Permission denied

    /upload.asp, line 151

    Muito Obrigado!

  31. Avatar de Ricardo
    Ricardo

    o ENCTYPE=”multipart/form-data” não foi suficiente… Alguma outra manifestação???

  32. Avatar de Jobe
    Jobe

    Para resolver o problema do
    “Chamada de procedimento ou argumento inválido: ‘MidB’”
    verifique se está colocando atributo ENCTYPE=”multipart/form-data” na tag FORM (como foi explicado e negritado pelo autor do artigo!)

  33. Avatar de Rafael Kellows
    Rafael Kellows

    Pessoal… alguém conseguiu resolver o prob. do pessoal acima??

  34. Avatar de Aninha
    Aninha

    Alguem conseguiu?
    Quem conseguir posta uma parte do codigo pra a gente ver….

  35. Avatar de Pedro Oscar
    Pedro Oscar

    O upload funciona sim…é só colocar os campo da sub de forma correta q ela funciona direitinho.
    Muito facinho de usar…..ah…..nao precisa de componente nenhum msm…

  36. Avatar de Tiago Neves

    Olha o título não é “SEM COMPONENTES” … porque estão dizendo para instalar componentes…. aiaiaiai…….

  37. Avatar de Bruno Sá

    Anderson | June 13th, 2006 at 9:58

    Ola galera, o erro do UPLOAD DESSES ARQUIVOS ai , é problema de Componente do Windows, intale-o e pronto !!!! Vai rodar…..

    Anderson, que componente é esse, como instalar?
    Valew!

  38. Avatar de Paulo Henrique
    Paulo Henrique

    O asp possui uma sintaxe muito mais simples, o que é melhor para pessoas que nunca programaram. O problema de instalar componentes do windows na máquina, é que só vai rodar na máquina, depois que hospedar no servidor, vai ser um rolo. não tem algum jeito de fazer upload direto no código? e qual a sintaxe? obrigado

  39. Avatar de Magno
    Magno

    Até hj não encontrei nada q o PHP faça que o ASP não faça..
    Vale lembrar que não existe apenas uma maneira de realizar a mesma tafera. ;-]

  40. Avatar de Anderson

    Ola galera, o erro do UPLOAD DESSES ARQUIVOS ai , é problema de Componente do Windows, intale-o e pronto !!!! Vai rodar…..

  41. Avatar de Estêvão Samuel Procópio

    Fábio, eu realmente não acho que depende não… primeiro: asp não tem controle de escopo… se eu tiver uma classe

    Class Group
    public function addUser(id)
    set usr = new User
    usr.get(login)
    end function
    End Class

    e quiser fazer algo assim:

    usr = new User
    usr.get(“tevaum”)

    grp = new Group
    grp.get(“Admin”)
    grp.addUser(“marcos”)

    response.write usr.login ‘isso irá escrever “marcos” na tela, por mais incrível que pareça.. :/

  42. Avatar de Fabio
    Fabio

    Esse negócio de PHP é melhor que ASP depende caras. Com as duas você pode fazer praticamente a mesma coisa, tudo bem que com ASP é um pouco mais dificil, mas pra trabalhar em ambiente Windows eu acho ela melhor.

  43. Avatar de danilo Nagem
    danilo Nagem

    Erro de tempo de execução do Microsoft VBScript (0x800A0005)
    Chamada de procedimento ou argumento inválido: ‘MidB’
    / caminho /upload.asp, line 13

    O meu ocorre o mesmo erro que o da galera…
    Alguem sabe a resposta??
    VALEU..

  44. Avatar de Éric
    Éric

    É, o meu está dando esse mesmo erro :

    Microsoft VBScript runtime error ‘800a0005′
    Invalid procedure call or argument: ‘MidB’
    /[… caminho …]/upload.asp, line 13

    Alguem atualiza o blog?!?!

    Valeu!

  45. Avatar de Fabio
    Fabio

    tentei fazer e deu esse erro abaixo:

    Microsoft VBScript runtime error ‘800a0005’
    Invalid procedure call or argument: ‘MidB’
    /[… caminho …]/upload.asp, line 13

    o q pode ser? como resolver?

  46. Avatar de felipe
    felipe

    Ué, mas porque?
    Outra coisa, python da para fazer aplicativos para web? Obrigado

  47. Avatar de Elcio

    Sim, realmente, fazer coisas como enviar email, upload de arquivos, rodar scripts no servidor, PHP é muito melhor que ASP. O problema é que a gente nem sempre pode escolher em que linguagem vai trabalhar. Se pudesse, faria tudo com Python.

  48. Avatar de felipe
    felipe

    sou mais via php hein… muito mais facil e melhor… no coments..

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *