Blog ComercialWeb - São Paulo - SP
E-mail: [email protected]
Atualizado: 07/10/2025

Upload de arquivos em ASP Clássico com validação e segurança

Upload de arquivos em ASP Clássico

Em ASP Clássico, o upload é feito lendo o corpo da requisição multipart/form-data via Request.BinaryRead. Depois, você precisa localizar os boundaries, separar campos e arquivos, validar o que será salvo e gravar no disco com ADODB.Stream.

Formulário HTML

<form method="post" enctype="multipart/form-data" action="upload.asp">
 <input type="file" name="arquivo" />
 <button type="submit">Enviar</button>
</form>

Processando o upload com validação

<%
On Error Resume Next
Dim bin, boundary, parts, i, maxBytes, nome, ext, permitidas, pasta, nomeFinal
maxBytes = 2 * 1024 * 1024 ' 2 MB
bin = Request.BinaryRead(Request.TotalBytes)
If LenB(bin) = 0 Then Response.End
' Descobrir o boundary a partir do cabeçalho
boundary = Split(Request.ServerVariables("HTTP_CONTENT_TYPE"), "boundary=")(1)
parts = Split(bin, "--" & boundary)
permitidas = Array(".jpg", ".png", ".pdf")
pasta = Server.MapPath("/uploads")
' percorrer as partes e localizar o arquivo
For i = 0 To UBound(parts)
 If InStr(1, parts(i), "filename=\"", vbTextCompare) > 0 Then
 nome = Mid(parts(i), InStrRev(parts(i), "\"", InStr(parts(i), "filename=\"")+30) + 1)
 nome = Left(nome, InStr(nome, "\"") - 1)
 ext = LCase(Mid(nome, InStrRev(nome, ".")))
 ' validar extensão
 Dim okExt: okExt = False
 Dim k: For k = 0 To UBound(permitidas): If ext = permitidas(k) Then okExt = True: Exit For: End If: Next
 If Not okExt Then Response.Write("Extensão não permitida"): Response.End
 ' validar tamanho
 If LenB(parts(i)) > maxBytes Then Response.Write("Arquivo muito grande"): Response.End
 ' gerar nome único
 Randomize: nomeFinal = Replace(Replace(Now(), "/", ""), ":", "") & "-" & Int(Rnd()*10000) & ext
 ' extrair bytes do arquivo (após \r\n\r\n até antes do final)
 Dim dados, inicio, fim
 inicio = InStrB(1, parts(i), CByte(&H0D)&CByte(&H0A)&CByte(&H0D)&CByte(&H0A)) + 4
 fim = LenB(parts(i)) - 2 ' remover -- e CRLF finais
 dados = MidB(parts(i), inicio, fim - inicio)
 ' gravar com ADODB.Stream
 Dim stm: Set stm = Server.CreateObject("ADODB.Stream")
 stm.Type = 1: stm.Open: stm.Write dados
 stm.SaveToFile pasta & "\" & nomeFinal, 2
 stm.Close: Set stm = Nothing
 Response.Write("Upload concluído: " & nomeFinal)
 End If
Next
On Error GoTo 0
%>

Crie a pasta /uploads com permissões de escrita para o usuário do IIS. Evite permitir upload em pastas executáveis e gere nomes únicos.

Perguntas frequentes

Qual o limite de tamanho do upload?
Além do limite definido no código, verifique configurações do IIS e timeouts. Em ambientes restritos, prefira uploads menores e compressão.
Como proteger o diretório de upload?
Impeça execução de scripts no diretório, restrinja permissões e, se possível, salve fora da raiz pública, servindo por um proxy controlado.
Posso usar componente pronto?
Sim. Há componentes COM e bibliotecas que simplificam multipart. Contudo, valide extensões e tamanho mesmo com bibliotecas.
Fonte: Redação ComercialWeb


Mais Lidos

Ferramentas úteis

Precisa gerar senhas, validar CPF/CNPJ ou criar QR Code? Acesse nossos Geradores e Validadores Online.