Jump to content



Photo

Upload Sem Componente


  • Please log in to reply
5 replies to this topic

#1 dedindol

dedindol

    Novato no fórum

  • Usuários
  • 3 posts
  • Sexo:Não informado

Posted 16/05/2008, 11:10

E ae galera do asp,
To tentando fazer um formulário que contém um campo pra upload sem utilizar um componente, pois sou iniciante e me perdi no uso do componente...hehe

o problema é o seguinte.... quando preciono Ok para enviar os dados, dá o seguinte erro:

Microsoft VBScript runtime error '800a01a8'

Object required: 'UploadRequest.Item(...)'

/novo/adm/upload.asp, line 113


A linha 113 está abaixo:

112---- - 'Caminho original do arquivo.
113----- filepathname = UploadRequest.Item(Campo).Item("FileName")

Minhas páginas são essas aí:
Incluinoticia.asp - que contém o formulário

[codebox]
<!--#Include file="upload.asp"-->

<link href="inc/estilo.css" rel="stylesheet" type="text/css">

<script>
function vazio(){

var titulo = document.form.titulo.value;
var chamada = document.form.chamada.value;
var conteudo = document.form.conteudo.value;

if(titulo == ""){
alert("Informe o Titulo da notícia");
document.form.titulo.focus();
return false;
}

if(chamada == ""){
alert("Digite a Chamada da notícia");
document.form.chamada.focus();
return false;
}

if(conteudo == ""){
alert("Digite o Conteudo da notícia");
document.form.conteudo.focus();
return false;
}

}
</script>

<form name="form" id="form" method="post" action="incluinoticiafinal.asp" onsubmit="return vazio()" enctype="multipart/form-data">
<table border="0" align="left" width="330">
<tr>
<td align="right" valign="top" class="caixa_texto">Título:</td>
<td><input name="titulo" type="text" class="caixa_texto" size="63" maxlength="255" /></td>
</tr>

<tr>
<td align="right" valign="top" class="caixa_texto">Chamada:</td>
<td><input name="chamada" type="text" class="caixa_texto" size="63" maxlength="255" /></td>
</tr>
<tr>
<td align="right" valign="top" class="caixa_texto">Conteudo:</td>
<td><textarea name="conteudo" cols="62" rows="14" class="caixa_texto"></textarea></td>
</tr>
<tr>
<td align="right" valign="top" class="caixa_texto">Imagem:</td>
<td><input name="file" type="file" class="caixa_texto" id="file" /></td>
</tr>
<tr>
<td align="right" valign="top" class="caixa_texto">Habilitar:</td>
<td><select name="ativa" class="caixa_texto">
<option value="s">Sim</option>
<option value="n">Não</option>
</select></td>
</tr>
<tr>
<td colspan="2" align="right">
<input type="submit" class="caixa_texto" value="Incluir Notícia" /> </td>
</tr>
</table>
</form>
[/codebox]


incluinoticiafinal.asp - que faz o upload e envia os dados para o bd

[codebox]
<!--#Include File="session.asp"-->
<!--#Include File="conexao.asp"-->
<!--#Include file="upload.asp"-->

<link href="inc/estilo.css" rel="stylesheet" type="text/css">

<%
Set upload_ReadRequest

dim Titulo, Conteudo, Ativa

Titulo = uRequest("titulo")
Chamada = uRequest("chamada")
Conteudo = uRequest("conteudo")
Ativa = uRequest("ativa")

If Ativa = "s" Then
Ativa = "1"
Else
ativa = "0"
End If

'ABRIR A CONEXÃO
Call AbreConn()

'Salva o arquivo
upload_SalvaArquivo "imagem", Server.MapPath("/novo/uploads/") & _
imagem, imagem, "jpg"


' INSERIR AS NOTICIAS NO BANCO DE DADOS
sql = "INSERT INTO tbNoticia (titulo, chNoticia, vcNoticia, imagem, ynNoticia) " &_
"VALUES ('" & titulo & "', '" & chamada & "', '" & conteudo & "', '" & imagem & "', " & ativa & ")"

'EXECUTAR A INSTRUÇÃO NO BANCO DE DADOS
Conn.Execute(sql)

'FECHAR A CONEXÃO
Call FechaConn

%>

<div align="center" class="azul">
<%if ativa = "1" then%>
<%Response.Write("A notícia está disponível no site!")%><br><br>
<%else%>
<%Response.Write("A noticia foi incluída, mas não está disponível no site!")%><br><br>
<%end if%>
</div>

<!-- SCRIPT QUE APRESENTA UMA MENSAGEM DE NOTICIA GRAVADA COM SUCESSO E DIRECIONA PARA A PÁGINA QUE LISTA TODAS AS NOTÍCIAS -->

<script type="text/javascript">
alert("Notícia Inserida com Sucesso!");
window.location="noticias.asp";
</script>
[/codebox]

E a upload.asp - que tem as rotinas para o upload (peguei pronta aqui no forum mesmo)

[codebox]
<%
' Author Philippe Collignon
' Email PhCollignon@email.com
' Modificado por Elcio Ferreira

Dim UploadRequest,filename
Set UploadRequest = CreateObject("Scripting.Dictionary")

Sub BuildUploadRequest(RequestBin)
'Get the boundary
PosBeg = 1
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
boundary = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
boundaryPos = InstrB(1,RequestBin,boundary)
'Get all data inside the boundaries
Do until (boundaryPos=InstrB(RequestBin,boundary & getByteString("--")))
'Members variable of objects are put in a dictionary object
Dim UploadControl
Set UploadControl = CreateObject("Scripting.Dictionary")
'Get an object name
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)
'Test if object is of file type
If PosFile<>0 AND (PosFile<PosBound) Then
'Get Filename, content-type and content of file
PosBeg = PosFile + 10
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(34)))
FileName = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
'Add filename to dictionary object
UploadControl.Add "FileName", FileName
Pos = InstrB(PosEnd,RequestBin,getByteString("Content-Type:"))
PosBeg = Pos+14
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
'Add content-type to dictionary object
ContentType = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
UploadControl.Add "ContentType",ContentType
'Get content of object
PosBeg = PosEnd+4
PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
Value = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
Else
'Get content of object
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
'Add content to dictionary object
UploadControl.Add "Value" , Value
'Add dictionary object to main dictionary
UploadRequest.Add name, UploadControl
'Loop to next object
BoundaryPos=InstrB(BoundaryPos+LenB(boundary),RequestBin,boundary)
Loop
End Sub

'String to byte string conversion
Function getByteString(StringStr)
For i = 1 to Len(StringStr)
char = Mid(StringStr,i,1)
getByteString = getByteString & chrB(AscB(char))
Next
End Function

'Byte string to string conversion
Function getString(StringBin)
getString =""
For intCount = 1 to LenB(StringBin)
getString = getString & chr(AscB(MidB(StringBin,intCount,1)))
Next
End Function

Function MontaTipo(strPath)
Dim intpos
intpos = InStrRev(strPath, "\", Len(strPath) - 1)
MontaTipo = Mid(strPath, intpos + 1, Len(strPath) - intpos - 1)
End Function

'Preenche o dicionário UploadRequest para que se possa
'ler os campos através dele.
Function upload_ReadRequest
Response.Expires=0
Response.Buffer = TRUE
Response.Clear
byteCount = Request.TotalBytes
RequestBin = Request.BinaryRead(byteCount)
BuildUploadRequest RequestBin
End Function

'Salva um arquivo por upload em caminho se for de um dos
'tipos em ExtensoesPermitidas (string no formato
'"jpg,jpeg,gif")
'Para salvar com o mesmo nome do envio, passe uma String
'vazia para nome.
Function upload_SalvaArquivo(Campo,Caminho,Nome,ExtensoesPermitidas)

'Segurança (bastante óbvio, não?)
EstensoesProibidas=",exe,asp,php,sql,bat,pif,ocx,dll,aspx,shtml,"
ExtensoesPermitidas="," & ExtensoesPermitidas & ","

'Onde salvar
strPath = Caminho
if right(strPath,1)<>"\" then
strPath=strPath&"\"
end if

'Caminho original do arquivo.
filepathname = UploadRequest.Item(Campo).Item("FileName")

'Obtém a extensão
For i = Len(filepathname) To 1 Step -1
If Mid(filepathname, i, 1) = "." Then Exit For
Next
extensao = Right(filepathname, Len(filepathname) - i)

'Verifica se a extensão é dos tipos permitidos.
if ExtensoesPermitidas=",*," then
pode=(InStr(extensao,EstensoesProibidas)=0)
else
pode=(InStr(extensao,EstensoesPermitidas)>0)
end if

if pode then

'On Error Resume Next

value = UploadRequest.Item(Campo).Item("Value")

'Create FileSytemObject Component
Set ScriptObject = Server.CreateObject("Scripting.FileSystemObject")

'Cria a pasta se ela não existir
if not ScriptObject.FolderExists(strPath) then ScriptObject.CreateFolder(strPath)

'Obtém o nome do arquivo a salvar
filename = Nome
if filename="" then
For i = Len(filepathname) To 1 Step -1
If Mid(filepathname, i, 1) = "\" Then Exit For
Next
filename = Right(filepathname, Len(filepathname) - i)
end if

'Create and Write to a File (WARNING: Overwrites existing!)
pathfilename = strPath & filename
Set MyFile = ScriptObject.CreateTextFile(pathfilename,true)

For i = 1 to LenB(value)
MyFile.Write chr(AscB(MidB(value,i,1)))
Next

MyFile.Close

' verificar se imagem foi enviada com sucesso.
if Err.number = 0 then
msgEnvio="Enviado com sucesso!"
else
msgEnvio="Ocorreu um erro no envio!"
end if
Err.Clear
else
msgEnvio="Extensão inválida!"
end if

upload_SalvaArquivo=msgEnvio

end function

function uRequest(n)
uRequest=""
if UploadRequest.Exists(n) then uRequest=UploadRequest.Item(n).Item("Value")
end function

%>
[/codebox]

Alguém pode me ajudar a resolver esse probleminha?

Valeu.
  • 0

#2 thicomp

thicomp

    12 Horas

  • Usuários
  • 134 posts
  • Sexo:Não informado

Posted 16/05/2008, 14:55

E aí cara, blz??
Eu acredito que o seu problema possa estar no envio do "button radio". O método "multipart/form-data" não faz a verificação de campos com o mesmo nome, como botões radio e checkbox. Já quebrei muito a cabeça com isso. O que vc pode fazer, e deixar um dos seus botões radio já selecionado e nao outra página vc faz a verificação...
Dá uma olhada e veja se o seu problema pode ser esse tb

Abçs
  • 0

#3 dedindol

dedindol

    Novato no fórum

  • Usuários
  • 3 posts
  • Sexo:Não informado

Posted 16/05/2008, 15:16

blz cara e vc?

então cara, o problema é que nao estou usando nenhum campo rário, uso apenas dois text e um file,

me disseram que o problema pode ser na declaração de uma classe que está faltando, mas nao faço ideia de como declarar uma classe e nem de que classe estão falando.

hehe...aí complica né...

se puder me ajudar, agradeço,

abraço cara...valeu
  • 0

#4 thicomp

thicomp

    12 Horas

  • Usuários
  • 134 posts
  • Sexo:Não informado

Posted 16/05/2008, 15:39

blz cara e vc?

então cara, o problema é que nao estou usando nenhum campo rário, uso apenas dois text e um file,

me disseram que o problema pode ser na declaração de uma classe que está faltando, mas nao faço ideia de como declarar uma classe e nem de que classe estão falando.

hehe...aí complica né...

se puder me ajudar, agradeço,

abraço cara...valeu


Ops cara, desculpe, não é radio nao, é o select, no seu form...
Tenta deixar uma das opções ja selecionadas e no arquivo que será chamado vc faz a verificação.
Uma vez tive um problema com um campo radio, onde eu tinha dois campos radios, mas sem seleção. Quando o arquivo, enviado pelo "form" utilizando o "multipart/form-data", ele me retornava um erro, que não estou lembrando agora. Mas aí deixei um dos campos selecionados e o código funcionou normal... Sei la, tenta ver se pode ser isso esse problema...
Por causa do seu campo "select", ou seja, campos que contem mais de uma opção

Abçs
  • 0

#5 dedindol

dedindol

    Novato no fórum

  • Usuários
  • 3 posts
  • Sexo:Não informado

Posted 19/05/2008, 09:50

Entao cara,

eu fiz o que vc falou,
coloquei o sim já selecionado, mas continua dando o mesmo erro.

nao faço ideia de como arrumar isso...hehe...ta complicado.

Se fizer ideia do que possa ser agora...agradeço...

valeu cara...abraços...

Galera,

eu resolvi o problema de uma forma bem simples....hehe...

encontrei um sisteminha aqui no forum no forum do imasters....

Ta disponibilizado para download no link abaixo:

http://forum.imaster...howtopic=245839

quem precisar fazer algum upload pode baixar esse aí que é animal...o cara é fera mesmo....

valeu pela ajuda ae...abraços...
  • 0

#6 Luka13

Luka13

    Novato no fórum

  • Usuários
  • 24 posts
  • Sexo:Masculino

Posted 18/07/2008, 16:29

Oi... legal esse sistema!

Uso um outro codigo sem componente onde uma página faz o upload e depois exibe uma outra página com o nome do arquivo e a visualização dele.

Mas se eu mandar outro arquivo com o mesmo nome, ele substitui.
Quero saber como evitar isso... seja renomeando automaticamente o arquivo ou exibindo algum alerta.

:unsure:


Editado:
Consegui resolver o problema do nome.
Foi só adicionar hora e data no local certo do código... e funcionou.

Edited by Luka13, 18/07/2008, 16:30.

  • 0




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq