Recentemente precisei de um código para fazer upload de arquivos em ASP, porém encontrei facilmente no site da UOL, neste link

Acontece que consegui com esse código enviar os arquivos, porém outros atributos no campo de formulário que submetiam a essa página, não consegui receber, como por ex. um campo de descrição do arquivo.

Portanto fiz algumas modificações e com o código que segue é possível se obter os demais parâmetros através da função GETCAMPO que desenvolvi, onde ela separa de um vetor previamente alimentado com os valores que vem do formulário.

Segue:

<%@ Language=VBScript %>
<%
Dim Contador, Tamanho
Dim ConteudoBinario, ConteudoTexto
Dim Delimitador, Posicao1, Posicao2
Dim ArquivoNome, ArquivoConteudo, PastaDestino
Dim objFSO, objArquivo
‘Função que separa os campos e seus valores
function getcampo(nome)
for i=0 to ubound(vet)
vety=split(vet(i),chr(10))
if instr(ucase(vety(0)),ucase(nome))>0 then
resultado = vety(2)
exit for
end if
next
getcampo=resultado
end function
PastaDestino = “c:\inetup\wwwroot\”
‘Determina o tamanho do conteúdo
Tamanho = Request.TotalBytes
‘Obtém o conteúdo no formato binário
ConteudoBinario = Request.BinaryRead(Tamanho)
‘Transforma o conteúdo binário em string
For Contador = 1 To Tamanho
ConteudoTexto = ConteudoTexto & Chr(AscB(MidB(ConteudoBinario, Contador, 1)))
Next
‘BLOCO QUE PERMITE ALIMENTAR O VETOR COM OS CAMPOS E VALORES E PEGAR OS VALORES DOS CAMPOS NECESSARIOS
vet = split(conteudotexto,”name=”)
descricao = getcampo(“descricao”)
 
‘Determina o delimitador de campos
Delimitador = Left(ConteudoTexto, InStr(ConteudoTexto, vbCrLf) – 1)
‘Percorre a String procurando os campos
‘identifica os arquivo e grava no disco
Set objFSO = Server.CreateObject(“Scripting.FileSystemObject”)
Posicao1 = InStr(ConteudoTexto, Delimitador) + Len(Delimitar)
do while True
ArquivoNome = “”
Posicao1 = InStr(Posicao1, ConteudoTexto, “filename=”)
if Posicao1 = 0 then
exit do
else
‘Determina o nome do arquivo
Posicao1 = Posicao1 + 10
Posicao2 = InStr(Posicao1, ConteudoTexto, “”””)
For contador = (Posicao2 – 1) to Posicao1 step -1
if Mid(ConteudoTexto, Contador, 1) <> “\” then ‘”
ArquivoNome = Mid(ConteudoTexto, Contador, 1) & ArquivoNome
else
exit for
end if
next
‘Determina o conteúdo do arquivo
Posicao1 = InStr(Posicao1, ConteudoTexto, vbCrLf & vbCrLf) + 4
Posicao2 = InStr(Posicao1, ConteudoTexto, Delimitador) – 2
ArquivoConteudo = Mid(ConteudoTexto, Posicao1, (Posicao2 – Posicao1 + 1))
‘Grava o arquivo
if ArquivoNome <> “” then
Set objArquivo = objFSO.CreateTextFile(PastaDestino & “\” & ArquivoNome, true)
objArquivo.WriteLine ArquivoConteudo
objArquivo.Close
Set objArquivo = nothing
end if
end if
Loop
Set objFSO = nothing
%>