Ir para conteúdo
Fórum CódigoFonte.net
Entre para seguir isso  
silas_master

Upload Sem Componentes, Passo a Passo

Recommended Posts

Olá pessoal.

Vou lhes mostrar como fazer upload sem componentes.

Eu precisei usar isso em um sistema que estou desenvolvendo, e, como sofri um pouco pra achar algo que funcionasse, vou postar aqui pra vocês como fazer.

Eu usei aqui 3 páginas pra isso.

Uma delas continha funções, usadas para fazer o upload.

Outra tinha o form, com campos texto e campos file.

E outra, com o código que cadastra no banco de dados, e que faz o upload.

Página Upload_funcoes.asp

<%
' Upload Sem componentes ---------------------------------------
Sub BuildUploadRequest(RequestBin)
on error resume next

PosBeg = 1
PosEnd = InStrB(PosBeg, RequestBin, getByteString(Chr(13)))
boundary = MidB(RequestBin, PosBeg, PosEnd - PosBeg)
BoundaryPos = InStrB(1, RequestBin, boundary)

Do Until (BoundaryPos = InStrB(RequestBin, boundary & getByteString("--")))

 Dim UploadControl
 Set UploadControl = CreateObject("Scripting.Dictionary")

 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)

 If PosFile <> 0 And (PosFile < PosBound) Then
  PosBeg = PosFile + 10
  PosEnd = InStrB(PosBeg, RequestBin, getByteString(Chr(34)))
  FileName = getString(MidB(RequestBin, PosBeg, PosEnd - PosBeg))
  UploadControl.Add "FileName", FileName
  Pos = InStrB(PosEnd, RequestBin, getByteString("Content-Type:"))
  PosBeg = Pos + 14
  PosEnd = InStrB(PosBeg, RequestBin, getByteString(Chr(13)))
  ContentType = getString(MidB(RequestBin, PosBeg, PosEnd - PosBeg))
  UploadControl.Add "ContentType", ContentType
  PosBeg = PosEnd + 4
  PosEnd = InStrB(PosBeg, RequestBin, boundary) - 2
  Value = MidB(RequestBin, PosBeg, PosEnd - PosBeg)
 Else
  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

 UploadControl.Add "Value", Value
 UploadRequest.Add Name, UploadControl
 BoundaryPos = InStrB(BoundaryPos + LenB(boundary), RequestBin, boundary)
Loop
End Sub

Function getByteString(StringStr)
For i = 1 To Len(StringStr)
 Char = Mid(StringStr, i, 1)
 getByteString = getByteString & ChrB(AscB(Char))
Next
End Function

Function getString(StringBin)
getString = ""
For intCount = 1 To LenB(StringBin)
 getString = getString & Chr(AscB(MidB(StringBin, intCount, 1)))
Next
End Function

' Fim upload sem Componentes -----------------------------------------
%>
Pagina Upload_form.asp
<!-- #include file = "upload_funcoes.asp" -->
<table>
<form name="form1" action="upload_form2.asp" method="post" enctype="multipart/form-data">
<tr>
 <td>Nome:</td>
 <td><input type="text" name="nome" size="20"></td>
</tr>
<tr>
 <td>E-mail:</td>
 <td><input type="text" name="email" size="20"></td>
</tr>
<tr>
 <td>Foto:</td>
 <td><input type="file" name="foto" size="14"></td>
</tr>
<tr>
 <td colspan="2">
  <input type="submit" name="submit" value="Enviar">
 </td>
</tr>
</form>
</table>
Pagina upload_form2.asp
<!-- #include file = "upload_funcoes.asp" -->
<%
' Chamando Funções, que fazem o Upload funcionar
byteCount = Request.TotalBytes
RequestBin = Request.BinaryRead(byteCount)
Set UploadRequest = CreateObject("Scripting.Dictionary")
BuildUploadRequest RequestBin

' Recuperando os Dados Digitados ----------------------
nome = UploadRequest.Item("nome").Item("Value")
email = UploadRequest.Item("email").Item("Value")

' Tipo de arquivo que esta sendo enviado
tipo_foto = UploadRequest.Item("foto").Item("ContentType")

' Caminho completo dos arquivos enviados
caminho_foto = UploadRequest.Item("foto").Item("FileName")

' Nome dos arquivos enviados
nome_foto = Right(caminho_foto,Len(caminho_foto)-InstrRev(caminho_foto,"\"))

' Conteudo binario dos arquivos enviados
foto = UploadRequest.Item("foto").Item("Value")

' pasta onde as imagens serao guardadas
pasta = Server.MapPath("imagens/")
nome_foto = "/"&nome_foto

' pasta + nome dos arquivos
cfoto = "imagens/lojas" + nome_foto

' Fazendo o Upload do arquivo selecionado
if foto <> "" then
Set ScriptObject = Server.CreateObject("Scripting.FileSystemObject")
Set MyFile = ScriptObject.CreateTextFile(pasta & nome_foto)
For i = 1 to LenB(foto)
 MyFile.Write chr(AscB(MidB(foto,i,1)))
Next
MyFile.Close
end if

' Conecta-se ao Banco de Dados
url_conexao = Server.MapPath("banco.mdb")
set conexao = Server.CreateObject("ADODB.Connection")
conexao.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&url_conexao

' cadastra os dados no banco de dados
sql = "Insert into lojas (nome,email,foto) values ('"& nome &"', '"& email &"', '"& cfoto &"')"
Conexao.Execute(sql)

' Mostra Mensagem de Confirmação na Tela
Response.write "Dados Cadastrados com Sucesso!"

' Redireciona após 5 segundos
response.write "<br><br>Vc será redirecionado em 5 segundos..<br>"
response.write "<meta http-equiv='refresh' content='5; url=index.asp'/>"
%>

Bem. Se mudarem o nome dos arquivos. Vejam nos includes, no começo do código, e alterem para o nome alterado.

Para adicionar mais campos, é só seguir essa lógica aí.

Eu testei aqui, antes de postar, e funcionou blz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Visitante
Responder

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Processando...
Entre para seguir isso  

×
×
  • Criar Novo...