Bom dia estou tentando utilizar um script em asp para o upload de arquivos para o servidor sem a utilização de componentes, porém estou recebendo o seguinte erro:
Microsoft VBScript runtime error '800a01a8'
Object required: 'myRequestFiles'
/upload.asp, line 191
O problema é que o arquivo não tem 191 linhas , tem 148 linhas, porém o problema se refere também a um objeto, o myRequestFiles, que está presente no código, porém o que acredito que está acontecendo é que ou o valor do myRequestFiles não está sendo passado corretamente, ou tem algum erro de programação. Bem copiei o código para o upload sem componentes daqui do forum...fiz um copy&paste e o problema persiste, gostaria, se possível alguém aqui me desse uma mão.
Bom o formulário parte de contato.asp:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- #include file = "upload_funcoes.asp" -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<link href="css/teste3.css" rel="stylesheet" type="text/css" />
<script language="JavaScript">
<!--
self.name = "contato";
//-->
</script>
</head>
<body>
<div id="cabecalhoesquerda"></div><div id="cabecalho"></div>
<div id="clear"></div>
<div id="esquerda"></div>
<form method="post" enctype="multpart/formdata" name="form1" action="http://www.meudominio.com.br/filepost.asp">
<div id="tudo">
<div id="um">
<label><strong>Nome:</strong>
<input type="text" name="camponome" id="camponome">
</label>
<br />
<label><strong>E-mail:</strong>
<input type="text" name="campoemail" id="campoemail" >
</label>
<br />
<label><strong>Anexos:</strong>
<input type="file" name="anexo" id="campoanexo" ><br />
<% for each x in request.form
response.write( x & ": " & request.form( x ) & "<br>" )
next
%>
</label>
</div>
<div id="dois">
<input type="submit" value="" id="submit" />
</div>
<div id="tres">
<label><strong>Mensagem:</strong><br />
<textarea name="campomensagem" id="mensagem" cols="45" rows="7"></textarea>
</label>
</div>
<div class="clear"></div>
</div>
</form>
<div id="peesquerda"></div><div id="pe"></div>
</body>
</html>
O conteúdo do arquivo upload_funcoes.asp do include é:
<%
Server.ScriptTimeout = 50000
' Upload Sem componentes ---------------------------------------
Sub BuildUploadRequest(RequestBin)
on error resume next
Dim sCaminho
sCaminho = "e:\home\meudominio\web\anexos\"
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 -----------------------------------------
%>
O conteúdo do arquivo filepost.asp que é para onde o formulário é direcionado após o submit é:
<!--#include file="upload.asp"-->
<%
dim x
set x = New cla_Upload
x.processaupload()
x.salvararquivos()
set x=nothing
response.redirect("http://www.meudominio.com.br/sucesso.html")
%>
E por último o conteúdo do arquivo upload.asp do include é:
<%
Class cla_Upload
Dim myRequest
Dim myRequestFiles
Dim tmpRequestFiles
dim crlf
Dim bJaProcessou
Public property get Variaveis(sVariavel)
on error resume next
if bJaProcessou then
Variaveis=myRequest(sVariavel)
end if
end property
Public Sub ProcessaUpload()
if bJaProcessou then
'erro
exit sub
end if
'Altera o tempo de processamento para arquivos grandes
Server.ScriptTimeout = 5400
Const ForWriting = 2
Const TristateTrue = -1
'Recupera os dados postados na forma binária
PostData = ""
Dim biData
biData = Request.BinaryRead(Request.TotalBytes)
'Transforma os dados da forma binária para algo mais legível
For nIndex = 1 to LenB(biData)
PostData = PostData & Chr(AscB(MidB(biData,nIndex,1)))
Next
'Recupera o content type para determinar o encoding dos dados
ContentType = Request.ServerVariables( _
"HTTP_CONTENT_TYPE")
ctArray = Split(ContentType, ";")
'Se o encoding for
'"multipart/form-data", então foi feito upload, damos sequencia ao processamento
If Trim(ctArray(0)) = "multipart/form-data" Then
ErrMsg = ""
' Obtem o boundery, o separador de variáveis utilizado na transmissão
bArray = Split(Trim(ctArray(1)), "=")
Boundary = Trim(bArray(1))
'Usa o Boundary para separar todas as variáveis
FormData = Split(PostData, Boundary)
'Criação de 3 scripting.dictionary que guardarão as informações
Set myRequest = CreateObject("Scripting.Dictionary")
Set myRequestFiles = CreateObject("Scripting.Dictionary")
FileCount = 1
For x = 0 to UBound(FormData)
set tmpRequestFiles=CreateObject("Scripting.Dictionary")
'Faz a localização de dois caracteres crlf que
'Marcam o fim dos metadados do campo e inicio dos dados propriamente
InfoEnd = InStr(FormData(x), CrLf & CrLf)
If InfoEnd > 0 Then
'Pega as informações sobre o campo
varInfo = Mid(FormData(x), 3, InfoEnd - 3)
'Pega o valor do campo, evitando os 2 crlf no inicio
'e o crlf que encontra-se no final
varValue = Mid(FormData(x), InfoEnd + 4, _
Len(FormData(x)) - InfoEnd - 7)
'Verifica se trata-se de um arquivo ou de uma variável qualquer
If (InStr(varInfo, "filename=") > 0) Then
'Monta um script dictionary com as informações sobre o arquivo
tmpRequestFiles.add "nome",GetFieldName(varInfo)
tmpRequestFiles.add "conteudo",varValue
tmpRequestFiles.add "filename",GetFileName(varInfo)
tmpRequestFiles.add "filetype",GetFileType(varInfo)
'Insere o script dictionary montado dentro de outro, contendo
'Todos os arquivos que levaram upload
myRequestFiles.ADD "arq" & FileCount,tmpRequestFiles
FileCount = FileCount + 1
Else
'É um campo comum
myRequest.add GetFieldName(varInfo), varValue
End If
End If
Next
Else
ErrMsg = "Falha no Encoding Type!"
End If
bjaprocessou=true
End Sub
Sub class_Initialize
bJaprocessou=false
CrLf = Chr(13) & Chr(10)
end Sub
Public Sub SalvarArquivos()
dim icnt
icnt=1
do while icnt<=myRequestFiles.Count
set tmprequestfiles=myRequestFiles.Item("arq" & icnt)
Set lf = server.createObject("Scripting.FileSystemObject")
' para utilizar o nome do arquivo original é necessário
'determinar que tipo de client enviou o arquivo.
'clientes Macintosh enviam apenas o nome do arquivo
'sem path, enquanto clientes Windows
'enviam o caminho inteiro do arquivo selecionado
BrowserType = UCase(Request.ServerVariables( "HTTP_USER_AGENT"))
If (InStr(BrowserType, "WIN") > 0) Then
'Sendo Windows, obtem o nome do arquivo do final do path
sPos = InStrRev(tmprequestfiles("filename"), "\")
fName = Mid(tmprequestfiles("filename"), sPos + 1)
End If
If (InStr(BrowserType, "MAC") > 0) Then
'Neste caso apenas o nome do arquivo foi recebido
fName = tmprequestfiles("filename")
End If
'se fizer um upload para um caminho diferente, altere aqui
FilePath = "e:\home\meudominio\web\anexos\" & fName
SavePath = Server.MapPath(FilePath)
Set SaveFile = lf.CreateTextFile(SavePath, True)
SaveFile.Write(tmprequestfiles("conteudo"))
SaveFile.Close
icnt=icnt+1
loop
End Sub
'Esta função recupera o nome de um campo
Private Function GetFieldName(infoStr)
sPos = InStr(infoStr, "name=")
EndPos = InStr(sPos + 6, infoStr, Chr(34) & ";")
If EndPos = 0 Then
EndPos = inStr(sPos + 6, infoStr, Chr(34))
End If
GetFieldName = Mid(infoStr, sPos + 6, endPos - (sPos + 6))
End Function
'Esta função recupera o filename de um arquivo
Private Function GetFileName(infoStr)
sPos = InStr(infoStr, "filename=")
EndPos = InStr(infoStr, Chr(34) & CrLf)
GetFileName = Mid(infoStr, sPos + 10, EndPos - (sPos + 10))
End Function
'Esta função recupera o MIME type de um arquivo
Private Function GetFileType(infoStr)
sPos = InStr(infoStr, "Content-Type: ")
GetFileType = Mid(infoStr, sPos + 14)
End Function
End Class
%>
Eu estava esperando que o arquivo fosse enviado com o anexo, porém como já disse aparece o erro:
Pergunta
pedrosbc
Bom dia estou tentando utilizar um script em asp para o upload de arquivos para o servidor sem a utilização de componentes, porém estou recebendo o seguinte erro:
Microsoft VBScript runtime error '800a01a8'
Object required: 'myRequestFiles'
/upload.asp, line 191
O problema é que o arquivo não tem 191 linhas , tem 148 linhas, porém o problema se refere também a um objeto, o myRequestFiles, que está presente no código, porém o que acredito que está acontecendo é que ou o valor do myRequestFiles não está sendo passado corretamente, ou tem algum erro de programação. Bem copiei o código para o upload sem componentes daqui do forum...fiz um copy&paste e o problema persiste, gostaria, se possível alguém aqui me desse uma mão.
Bom o formulário parte de contato.asp:
Eu estava esperando que o arquivo fosse enviado com o anexo, porém como já disse aparece o erro:
Microsoft VBScript runtime error '800a01a8'
Object required: 'myRequestFiles'
/upload.asp, line 191
Será que alguém pode me ajudar?
Desde já agradeço
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.