Ir para conteúdo

POWERED BY:

Arquivado

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

Bins

Upload x form parte 2

Recommended Posts

Saudações colegas!Não teve jeito, apenas dos supremos esforços de meu ser e da gentil ajuda dos colegas, continuo apanhando dos 2.Vou explicar detalhadamente o que acontece.No formulario que crie, configurei a tag FORM com method=POST e EncType=Form.data. Tudo bem com ele.Na pagina que recebe os dados, pedi para ler os campos do form da seguinte forma:<%@LANGUAGE="VBSCRIPT"%><%response.buffer=truevcod1=request ("cod1") (...)%>Nomes dos campos do request igual aos inputs do form.Depois, coloquei a rotina que recebe o arquivo escolhido logo a seguir, que está funcionando.Por ultimo, peço para conectar o banco de dados. Ai deu erro :-(Quando imprimi a string de conexão, percebi que as variaveis estavam vazias!Porem, se eu tirar o enctype=form.data do formulario que manda os dados, ai este erro não ocorre, recebo os dados mas nao recebo o arquivo.Alguem tem alguma ideia do que possa ser?Coloco a seguir a rotina que estou usando para gravar o arquivo. Tem muitas linhas de comentario, é que não passei a limpo ainda :-)<%ForWriting = 2adLongVarChar = 201lngNumberUploaded = 0'Get binary data from form noBytes = Request.TotalBytes binData = Request.BinaryRead (noBytes)'convery the binary data to a stringLenBinary = LenB(binData)'Creates a raw data file for with all data sent. Uncomment for debuging. 'Set fso = CreateObject("Scripting.FileSystemObject")'Set f = fso.OpenTextFile(server.mappath(".") & "\raw.txt", ForWriting, True)'f.Write strDataWhole'set f = nothing'set fso = nothing'get the boundry indicatorstrBoundry = Request.ServerVariables ("HTTP_CONTENT_TYPE")lngBoundryPos = instr(1,strBoundry,"boundary=") + 8 strBoundry = "--" & right(strBoundry,len(strBoundry)-lngBoundryPos)'Get first file boundry positions.lngCurrentBegin = instr(1,strDataWhole,strBoundry)lngCurrentEnd = instr(lngCurrentBegin + 1,strDataWhole,strBoundry) - 1Do While lngCurrentEnd > 0'Get the data between current boundry and remove it from the whole.strData = mid(strDataWhole,lngCurrentBegin, lngCurrentEnd - lngCurrentBegin)strDataWhole = replace(strDataWhole,strData,"")'Get the full path of the current file.lngBeginFileName = instr(1,strdata,"filename=") + 10lngEndFileName = instr(lngBeginFileName,strData,chr(34)) 'Make sure they selected at least one fi' le. if lngBeginFileName = lngEndFileName and lngNumberUploaded = 0 ThenResponse.Write "Erro ao enviar arquivo"End if'There could be one or more empty file boxes. if lngBeginFileName <> lngEndFileName ThenstrFilename = mid(strData,lngBeginFileName,lngEndFileName - lngBeginFileName)'Creates a raw data file with data between current boundrys. Uncomment for debuging. 'Set fso = CreateObject("Scripting.FileSystemObject")'Set f = fso.OpenTextFile(server.mappath(".") & "\raw_" & lngNumberUploaded & ".txt", ForWriting, True)'f.Write strData'set f = nothing'set fso = nothing'Loose the path information and keep just the file name. tmpLng = instr(1,strFilename,"\")Do While tmpLng > 0PrevPos = tmpLngtmpLng = instr(PrevPos + 1,strFilename,"\")LoopFileName = right(strFilename,len(strFileName) - PrevPos)'Get the begining position of the file data sent.'if the file type is registered with the browser then there will be a Content-TypelngCT = instr(1,strData,"Content-Type:")if lngCT > 0 ThenlngBeginPos = instr(lngCT,strData,chr(13) & chr(10)) + 4ElselngBeginPos = lngEndFileNameEnd if'Get the ending position of the file dat' a sent.lngEndPos = len(strData) 'Calculate the file size. lngDataLenth = lngEndPos - lngBeginPos'Get the file data strFileData = mid(strData,lngBeginPos,lngDataLenth)'Create the file. Set fso = CreateObject("Scripting.FileSystemObject")Set f = fso.OpenTextFile(server.mappath("..") & "\upload\images\" & FileName, ForWriting, True)f.Write strFileDataSet f = nothingSet fso = nothinglngNumberUploaded = lngNumberUploaded + 1End if'Get then next boundry postitions if any' .lngCurrentBegin = instr(1,strDataWhole,strBoundry)lngCurrentEnd = instr(lngCurrentBegin + 1,strDataWhole,strBoundry) - 1loop%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

CONSEGUI!!!!!!

 

Após uma emocionante luta, finalmente Bins nocauteia o ASP e bota o programa da Microsoft na lona!!!!

 

Após pesquisar bastante, descobri que o tal do BinaryRead por padrão inutiliza qualquer tipo de Request, então tive que abordar o problema de outra maneira. Vou compartilhar a solução com vocês, talvez possa ser util para alguem

 

a) Fiz o form sem o campo para upload da figura

:o Na pagina que recebe os dados, carreguei cada campo numa sessão

c) Esta pagina mostra um form para escolher o arquivo desejado

d) A pagina que recebe e grava o arquivo cria uma sessão para guardar o nome da figura

e) Por fim, nesta pagina, no final dela faço uma string de conexão com a base de dados, e descarrego todas as sessions para dentro da tabela da minha escolha.

 

Com isso, finalmente posso cadastrar o que eu quiser num form, mandar um arquivo para o server e ainda guardar o seu nome na tabela.

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.