Estou utilizando o código de UPLOAD SEM COMPONENTE que encontrei aqui no forum. Estou utilizando um banco de dados para guardar o nome das fotos apos o upload ser realizado. Até ai funciona bem. Mas percebi que se eu enviar uma outra foto com o mesmo nome, ele substitui a antiga foto.
Tentei usar o REQUEST.FORM para guardar em uma variavel o nome e o caminho da foto e quebrar o nome do arquivo para comprar no diretorio com FOS Exist, mas o comando request não funcionou pois o form utiliza ENCTYPE="multipart/form-data".
Tentei localizar as variáveis onde é guardada as fotos no codigo mas não consegui utiliza-las e nem encontra-las.
A minha duvida é o seguinte: Como faço para testar se o nome foto existe na pasta onde serão guardadas as fotos e se existir renomea-las para outro nome.
Código logo abaixo - UPLOADTESTER.ASP
<%@ Language=VBScript %>
<%
option explicit
Response.Expires = -1
Server.ScriptTimeout = 600
%>
<!--#include file="config.asp" -->
<!--#include file="freeaspupload.asp" -->
<%
Dim uploadsDirVar
uploadsDirVar = "D:\codigo_fonte\Asp\_exemplos\upload_sem_comp\arquivos\"
function OutputForm()
%>
<form name="frmSend" method="POST" action="uploadTester.asp" ENCTYPE="multipart/form-data" onSubmit="return ChecaExtensaoArquivo(this)">
Foto 1: <input name=foto1 type=file size=35 style="background-color: #F9F9F9; color: black; font-family: Verdana; font-size: 10px; border: 1 solid #000000"><br>
Foto 2: <input name=foto2 type=file size=35 style="background-color: #F9F9F9; color: black; font-family: Verdana; font-size: 10px; border: 1 solid #000000"><br>
Foto 3: <input name=foto3 type=file size=35 style="background-color: #F9F9F9; color: black; font-family: Verdana; font-size: 10px; border: 1 solid #000000"><br>
Foto 4: <input name=foto4 type=file size=35 style="background-color: #F9F9F9; color: black; font-family: Verdana; font-size: 10px; border: 1 solid #000000"><br>
<br>
<input type=submit value="Enviar fotos" style="margin-top:4; background-color: #F3F3F3; color: #000000; font-family: Verdana; font-size: 10px; border: 1 fina #000000">
</form>
<%
end function
function TestEnvironment()
Dim FSO, fileName, testFile, streamTest
TestEnvironment = ""
Set FSO = Server.CreateObject("Scripting.FileSystemObject")
if not FSO.FolderExists(uploadsDirVar) then
TestEnvironment = "<B>Caminho " & uploadsDirVar & " não existe.</B><br>O caminho atribuido na variável uploadsDirVar não existe. Abra o arquivo uploadTester.asp em um editor e corrija o caminho atribuído a variável uploadsDirVar."
exit function
end if
fileName = uploadsDirVar & "\tedfdfst.txt"
on error resume next
Set testFile = FSO.CreateTextFile(fileName, true)
If Err.Number<>0 then
TestEnvironment = "<B>Folder " & uploadsDirVar & " does not have write permissions.</B><br>The value of your uploadsDirVar is incorrect. Open uploadTester.asp in an editor and change the value of uploadsDirVar to the pathname of a directory with write permissions."
exit function
end if
Err.Clear
testFile.Close
FSO.DeleteFile(fileName)
If Err.Number<>0 then
TestEnvironment = "<B>Folder " & uploadsDirVar & " does not have delete permissions</B>, although it does have write permissions.<br>Change the permissions for IUSR_<I>computername</I> on this folder."
exit function
end if
Err.Clear
Set streamTest = Server.CreateObject("ADODB.Stream")
If Err.Number<>0 then
TestEnvironment = "<B>The ADODB object <I>Stream</I> is not available in your server.</B><br>Check the Requirements page for information about upgrading your ADODB libraries."
exit function
end if
Set streamTest = Nothing
end function
function SaveFiles
Dim Upload, fileName, fileSize, ks, i, fileKey, fotos, sql, conn, rs, idimoveis
Set Upload = New FreeASPUpload
Upload.Save(uploadsDirVar)
SaveFiles = ""
ks = Upload.UploadedFiles.keys
if (UBound(ks) <> -1) then
SaveFiles = "<B>Arquivos carregados:</B> "
for each fileKey in Upload.UploadedFiles.keys
SaveFiles = SaveFiles &" , " & Upload.UploadedFiles(fileKey).FileName
fotos = Upload.UploadedFiles(fileKey).FileName&","
fotos=replace(fotos,",","")
idimoveis=1
Set Conn = Server.CreateObject("ADODB.Connection")
Set Rs = Server.CreateObject("ADODB.Recordset")
Conn.Open dsn1
sql = "insert into fotos (id_imoveis,fotos_imoveis)values ('" & idimoveis & "','" & fotos & "')"
Rs.Open sql, conn
next
else
SaveFiles = "The file name specified in the upload form does not correspond to a valid file in the system."
end if
'end if
end function
%>
<HTML>
<HEAD>
<TITLE>Test Free ASP Upload</TITLE>
<style>
BODY {background-color: white;font-family:arial; font-size:12}
</style>
<script type="text/javascript">
function ChecaExtensaoArquivo( frmSend )
{
var extensoesOk = ",.jpg,.gif,";
var extensao =frmSend.foto1.value.substr( frmSend.foto1.value.length - 4 ).toLowerCase() + ",";
if( extensoesOk.indexOf( extensao) == -1 ){
alert("\ERRO FOTO 1: Permitido somente arquivos com extensões .JPG ou .GIF - Caminho do Arquivo escolhido: " +frmSend.foto1.value);
return false;
}
var extensao2 =frmSend.foto2.value.substr( frmSend.foto2.value.length - 4 ).toLowerCase() + ",";
if( extensoesOk.indexOf( extensao2) == -1 ){
alert("\ERRO FOTO 2: Permitido somente arquivos com extensões .JPG ou .GIF - Caminho do Arquivo escolhido: " +frmSend.foto2.value);
return false;
}
var extensao3 =frmSend.foto3.value.substr( frmSend.foto3.value.length - 4 ).toLowerCase() + ",";
if( extensoesOk.indexOf( extensao3) == -1 ){
alert("\ERRO FOTO 3: Permitido somente arquivos com extensões .JPG ou .GIF - Caminho do Arquivo escolhido: " +frmSend.foto3.value);
return false;
}
var extensao4 =frmSend.foto4.value.substr( frmSend.foto4.value.length - 4 ).toLowerCase() + ",";
if( extensoesOk.indexOf( extensao4) == -1 ){
alert("\ERRO FOTO 4: Permitido somente arquivos com extensões .JPG ou .GIF - Caminho do Arquivo escolhido: " +frmSend.foto4.value);
return false;
}
return true;
}
</script>
</HEAD>
<BODY>
<br><br>
<%
Dim diagnostics
if Request.ServerVariables("REQUEST_METHOD") <> "POST" then
diagnostics = TestEnvironment()
if diagnostics<>"" then
response.write "<div style=""margin-left:20; margin-top:30; margin-right:30; margin-bottom:30;"">"
response.write diagnostics
response.write "<p>Contate o suporte técnico: <a href=mailto:chisleme@ig.com.br>chisleme@ig.com.br</a>"
response.write "</div>"
else
response.write "<div style=""margin-left:150"">"
OutputForm()
response.write "</div>"
end if
else
response.write "<div style=""margin-left:150"">"
OutputForm()
response.write SaveFiles()
response.write "<br><br></div>"
end if
%>
</BODY>
</HTML>
FREEASPUPLOAD.ASP
<%
Class FreeASPUpload
Public UploadedFiles
Public FormElements
Private VarArrayBinRequest
Private StreamRequest
Private uploadedYet
Private Sub Class_Initialize()
Set UploadedFiles = Server.CreateObject("Scripting.Dictionary")
Set FormElements = Server.CreateObject("Scripting.Dictionary")
Set StreamRequest = Server.CreateObject("ADODB.Stream")
StreamRequest.Type = 1 'adTypeBinary
StreamRequest.Open
uploadedYet = false
End Sub
Private Sub Class_Terminate()
If IsObject(UploadedFiles) Then
UploadedFiles.RemoveAll()
Set UploadedFiles = Nothing
End If
If IsObject(FormElements) Then
FormElements.RemoveAll()
Set FormElements = Nothing
End If
StreamRequest.Close
Set StreamRequest = Nothing
End Sub
Public Property Get Form(sIndex)
Form = ""
If FormElements.Exists(LCase(sIndex)) Then Form = FormElements.Item(LCase(sIndex))
End Property
Public Property Get Files()
Files = UploadedFiles.Items
End Property
'Calls Upload to extract the data from the binary request and then saves the uploaded files
Public Sub Save(path)
Dim streamFile, fileItem
if Right(path, 1) <> "\" then path = path & "\"
if not uploadedYet then Upload
For Each fileItem In UploadedFiles.Items
Set streamFile = Server.CreateObject("ADODB.Stream")
streamFile.Type = 1
streamFile.Open
StreamRequest.Position=fileItem.Start
StreamRequest.CopyTo streamFile, fileItem.Length
streamFile.SaveToFile path & fileItem.FileName, 2
streamFile.close
Set streamFile = Nothing
fileItem.Path = path & fileItem.FileName
Next
End Sub
Public Sub DumpData() 'only works if files are plain text
Dim i, aKeys, f
response.write "Form Items:<br>"
aKeys = FormElements.Keys
For i = 0 To FormElements.Count -1 ' Iterate the array
response.write aKeys(i) & " = " & FormElements.Item(aKeys(i)) & "<BR>"
Next
response.write "Uploaded Files:<br>"
For Each f In UploadedFiles.Items
response.write "Name: " & f.FileName & "<br>"
response.write "Type: " & f.ContentType & "<br>"
response.write "Start: " & f.Start & "<br>"
response.write "Size: " & f.Length & "<br>"
Next
End Sub
Private Sub Upload()
Dim nCurPos, nDataBoundPos, nLastSepPos
Dim nPosFile, nPosBound
Dim sFieldName
'RFC1867 Tokens
Dim vDataSep
Dim tNewLine, tDoubleQuotes, tTerm, tFilename, tName, tContentDisp, tContentType
tNewLine = Byte2String(Chr(13))
tDoubleQuotes = Byte2String(Chr(34))
tTerm = Byte2String("--")
tFilename = Byte2String("filename=""")
tName = Byte2String("name=""")
tContentDisp = Byte2String("Content-Disposition")
tContentType = Byte2String("Content-Type:")
uploadedYet = true
VarArrayBinRequest = Request.BinaryRead(Request.TotalBytes)
nCurPos = FindToken(tNewLine,1) 'Note: nCurPos is 1-based (and so is InstrB, MidB, etc)
If nCurPos <= 1 Then Exit Sub
'vDataSep is a separator like -----------------------------21763138716045
vDataSep = MidB(VarArrayBinRequest, 1, nCurPos-1)
'Start of current separator
nDataBoundPos = 1
'Beginning of last line
nLastSepPos = FindToken(vDataSep & tTerm, 1)
Do Until nDataBoundPos = nLastSepPos
nCurPos = SkipToken(tContentDisp, nDataBoundPos)
nCurPos = SkipToken(tName, nCurPos)
sFieldName = ExtractField(tDoubleQuotes, nCurPos)
nPosFile = FindToken(tFilename, nCurPos)
nPosBound = FindToken(vDataSep, nCurPos)
If nPosFile <> 0 And nPosFile < nPosBound Then
Dim oUploadFile, sFileName
Set oUploadFile = New UploadedFile
nCurPos = SkipToken(tFilename, nCurPos)
sFileName = ExtractField(tDoubleQuotes, nCurPos)
oUploadFile.FileName = Right(sFileName, Len(sFileName)-InStrRev(sFileName, "\"))
if (Len(oUploadFile.FileName) > 0) then 'File field not left empy
nCurPos = SkipToken(tContentType, nCurPos)
oUploadFile.ContentType = ExtractField(tNewLine, nCurPos)
nCurPos = FindToken(tNewLine, nCurPos) + 4 'skip empty line
oUploadFile.Start = nCurPos-1
oUploadFile.Length = FindToken(vDataSep, nCurPos) - 2 - nCurPos
If oUploadFile.Length > 0 Then UploadedFiles.Add LCase(sFieldName), oUploadFile
End If
Else
Dim nEndOfData
nCurPos = FindToken(tNewLine, nCurPos) + 4 'skip empty line
nEndOfData = FindToken(vDataSep, nCurPos) - 2
If Not FormElements.Exists(LCase(sFieldName)) Then FormElements.Add LCase(sFieldName), String2Byte(MidB(VarArrayBinRequest, nCurPos, nEndOfData-nCurPos))
End If
'Advance to next separator
nDataBoundPos = FindToken(vDataSep, nCurPos)
Loop
StreamRequest.Write(VarArrayBinRequest)
End Sub
Private Function SkipToken(sToken, nStart)
SkipToken = InstrB(nStart, VarArrayBinRequest, sToken)
If SkipToken = 0 then
Response.write "Error in parsing uploaded binary request."
Response.End
end if
SkipToken = SkipToken + LenB(sToken)
End Function
Private Function FindToken(sToken, nStart)
FindToken = InstrB(nStart, VarArrayBinRequest, sToken)
End Function
Private Function ExtractField(sToken, nStart)
Dim nEnd
nEnd = InstrB(nStart, VarArrayBinRequest, sToken)
If nEnd = 0 then
Response.write "Error in parsing uploaded binary request."
Response.End
end if
ExtractField = String2Byte(MidB(VarArrayBinRequest, nStart, nEnd-nStart))
End Function
Public Function SaveBinRequest(path) ' For debugging purposes
StreamRequest.SaveToFile path & "debugStream.bin", 2
End Function
'String to byte string conversion
Private Function Byte2String(sString)
Dim i
For i = 1 to Len(sString)
Byte2String = Byte2String & ChrB(AscB(Mid(sString,i,1)))
Next
End Function
'Byte string to string conversion
Private Function String2Byte(bsString)
Dim i
String2Byte =""
For i = 1 to LenB(bsString)
String2Byte = String2Byte & Chr(AscB(MidB(bsString,i,1)))
Next
End Function
End Class
Class UploadedFile
Public ContentType
Public FileName
Public Start
Public Length
Public Path
End Class
%>
Pergunta
<% LEMES %>
Estou utilizando o código de UPLOAD SEM COMPONENTE que encontrei aqui no forum. Estou utilizando um banco de dados para guardar o nome das fotos apos o upload ser realizado. Até ai funciona bem. Mas percebi que se eu enviar uma outra foto com o mesmo nome, ele substitui a antiga foto.
Tentei usar o REQUEST.FORM para guardar em uma variavel o nome e o caminho da foto e quebrar o nome do arquivo para comprar no diretorio com FOS Exist, mas o comando request não funcionou pois o form utiliza ENCTYPE="multipart/form-data".
Tentei localizar as variáveis onde é guardada as fotos no codigo mas não consegui utiliza-las e nem encontra-las.
A minha duvida é o seguinte: Como faço para testar se o nome foto existe na pasta onde serão guardadas as fotos e se existir renomea-las para outro nome.
Código logo abaixo - UPLOADTESTER.ASP
FREEASPUPLOAD.ASPLink para o comentário
Compartilhar em outros sites
10 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.