Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

luamm

Upload s/ componente + BD

Recommended Posts

Salve Galera http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Eu tô com um problema que nunca havia me deparado antes, seguinte:Preciso fazer um upload de dois arquivos que estão em um formulário com outros tantos campos, até aí beleza http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif O problema é que o servidor onde meu cliente esta hospedado não é daqui é da Itália, e não tem suporte a nenhum componente de upload :blink: Sei que consigo fazer o upload somente com o código ASP sem componentes, com o FSO, e até consegui achar um script que faz isso, o problema agora é como chamar o restante dos campos que estavam no formulário para que eu possa gravar tudo no bd?Segue o arquivo que faz o upload sem componente:

<%@ Language=VBScript %><%Dim Contador, Tamanho, iDim ConteudoBinario, ConteudoTextoDim Delimitador, Posicao1, Posicao2Dim ArquivoNome, ArquivoConteudo, PastaDestinoDim objFSO, objArquivoPastaDestino = Server.MapPath("imagens")'Determina o tamanho do conteúdoTamanho = Request.TotalBytes'Obtém o conteúdo no formato binárioConteudoBinario = Request.BinaryRead(Tamanho)'Transforma o conteúdo binário em stringFor Contador = 1 To Tamanho ConteudoTexto = ConteudoTexto & Chr(AscB(MidB(ConteudoBinario, Contador, 1)))Next lala = ConteudoTexto & Chr(AscB(MidB(ConteudoBinario, 1, 2))) Response.Write lala'Determina o delimitador de camposDelimitador = Left(ConteudoTexto, InStr(ConteudoTexto, vbCrLf) - 1)'Percorre a String procurando os campos'identifica os arquivo e grava no discoSet objFSO = Server.CreateObject("Scripting.FileSystemObject")Posicao1 = InStr(ConteudoTexto, Delimitador) + Len(Delimitar)i=0do while Truei=i+1 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 'Response.write "Arquivo " & PastaDestino & "\" & _ 'ArquivoNome &" Gravado com sucesso!<br>" IF i = 1 Then ArquivoNome1 = ArquivoNome IF i = 2 Then ArquivoNome2 = ArquivoNome Set objArquivo = nothing end ifend ifLoopSet objFSO = nothing%>

Sei que qdo se usa "Request.BinaryRead" não é possível usar a coleção Request, então como devo chamar os outros campos do formulário?Ficaria muito grata se alguém pudesse me ajudar, pq é urgente! :( Desde já agradeço... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif BJKSLUAMM

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso ai funciona??Tentei aki no meu PC e dah erro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá wolfphw,

 

Olha só... este é o script apenas do upload, tem mais dois arquivos relacionados, um é o "incluir_noticia.asp" que possui o form que indica para "incluir_noticia2.asp", nesta última é onde eu tento fazer a inclusão no banco, no início dela tem um include file que faz referência ao arquivo do upload, esse aí que eu postei... entende?

 

http://forum.imasters.com.br/public/style_emoticons/default/kiss.gif

LUAMM

Compartilhar este post


Link para o post
Compartilhar em outros sites

umm... entendi :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou te dar um exemplo que uso há tempos e funciona muito bem.

 

Página funcaoupload.asp

<%Sub BuildUploadRequest(RequestBin)on error resume nextPosBeg = 1PosEnd = 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 UploadControlSet UploadControl = CreateObject("Scripting.Dictionary")Pos = InStrB(BoundaryPos, RequestBin, getByteString("Content-Disposition"))Pos = InStrB(Pos, RequestBin, getByteString("name="))PosBeg = Pos + 6PosEnd = 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) ThenPosBeg = PosFile + 10PosEnd = InStrB(PosBeg, RequestBin, getByteString(Chr(34)))FileName = getString(MidB(RequestBin, PosBeg, PosEnd - PosBeg))UploadControl.Add "FileName", FileNamePos = InStrB(PosEnd, RequestBin, getByteString("Content-Type:"))PosBeg = Pos + 14PosEnd = InStrB(PosBeg, RequestBin, getByteString(Chr(13)))ContentType = getString(MidB(RequestBin, PosBeg, PosEnd - PosBeg))UploadControl.Add "ContentType", ContentTypePosBeg = PosEnd + 4PosEnd = InStrB(PosBeg, RequestBin, boundary) - 2Value = MidB(RequestBin, PosBeg, PosEnd - PosBeg)ElsePos = InStrB(Pos, RequestBin, getByteString(Chr(13)))PosBeg = Pos + 4PosEnd = InStrB(PosBeg, RequestBin, boundary) - 2Value = getString(MidB(RequestBin, PosBeg, PosEnd - PosBeg))End IfUploadControl.Add "Value", ValueUploadRequest.Add Name, UploadControlBoundaryPos = InStrB(BoundaryPos + LenB(boundary), RequestBin, boundary)LoopEnd SubFunction getByteString(StringStr)For i = 1 To Len(StringStr)Char = Mid(StringStr, i, 1)getByteString = getByteString & ChrB(AscB(Char))NextEnd FunctionFunction getString(StringBin)getString = ""For intCount = 1 To LenB(StringBin)getString = getString & Chr(AscB(MidB(StringBin, intCount, 1)))NextEnd Function%>

 

Página que recupera os dados

 

<%Response.Buffer = TrueResponse.Clear%><!-- #include virtual ="/funcaoupload.asp" --><% Response.Expires = 0byteCount = Request.TotalBytesRequestBin = Request.BinaryRead(byteCount)Set UploadRequest = CreateObject("Scripting.Dictionary")BuildUploadRequest RequestBinDim pgpg="NomedoArquivo"'###############Recuperando DADOS###########titulo = Trim(UploadRequest.Item("titulo").Item("Value"))data = Trim(UploadRequest.Item("data").Item("Value"))Texto = Trim(UploadRequest.Item("texto").Item("Value"))'###############Recuperando ARQUIVOS###########Value = UploadRequest.Item("fototop").Item("Value")IF Value<>"" ThenSet ScriptObject = Server.CreateObject("Scripting.FileSystemObject")Set MyFile = ScriptObject.CreateTextFile(Server.MapPath("/imagens/") & "\" & pg &"top.jpg")For i = 1 To LenB(Value)MyFile.Write Chr(AscB(MidB(Value, i, 1)))NextMyFile.CloseEnd IfValue = UploadRequest.Item("foto").Item("Value")IF Value<>"" ThenSet ScriptObject = Server.CreateObject("Scripting.FileSystemObject")Set MyFile = ScriptObject.CreateTextFile(Server.MapPath("/imagens/")  & "\" & pg &"foto.jpg")For i = 1 To LenB(Value)MyFile.Write Chr(AscB(MidB(Value, i, 1)))NextMyFile.CloseEnd IF%>

Só reparando que o uploadrequest é case sensitive, ou seja

UploadRequest.Item("titulo").Item("Value"))

é diferente de

UploadRequest.Item("Titulo").Item("Value"))

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode tentar usar o freaspupload pra fazer o upload...

 

não é componente é uma classe e pra recuperar os outros campos é so usar o nome_do_objeto.form("campo") e pronto...

 

você pega a classe em

 

http://www.freeaspupload.net

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigada pela dica Marioufpa....

 

Mais você disse que para eu chamar os outros campos era só digitar "nome_do_objeto.form("campo")", só que a classe que faz o upload tem vários objetos você sabe qual deles devo usar? :huh:

 

Desde já agradeço,

 

LUAMM

O.B.S.: Tb vou tentar utilizar o script que o "arr" mandou

Compartilhar este post


Link para o post
Compartilhar em outros sites

uma opção seria guardar os campos de texto em sessions e fazer o upload e no final do upload fazer o insert ou update, costumo fazer isso e funciona na boa

Compartilhar este post


Link para o post
Compartilhar em outros sites

o nome do obleto que digo é o objeto de upload que recebe a instancia da classe...o padrão é da classe FreeAspUpload é Upload, veja aquiSet Upload = New FreeASPUploadassim você chamariaUpload.form("campo")mas o nome do objeto você pode mudar é só querer...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.