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.
<form method="post" enctype="multipart/form-data" action="upload.asp">
<input type="file" name="arquivo" />
<button type="submit">Enviar</button>
</form>
<%
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.
Precisa gerar senhas, validar CPF/CNPJ ou criar QR Code? Acesse nossos Geradores e Validadores Online.