Ir para conteúdo

Arquivado

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

lucasmoraes

FreeASPUpload modificar nomes

Recommended Posts

pessoal estou com um pequeno problema, utilizo de um upload sem componentes chamado FreeASPUpload.

o problema e o seguinte, preciso renomear as fotos antes de fazer o upload pois caso alguem adicione fotos diferentes com o mesmo nome não aconteça de substituir a foto antiga.

outra coisa que precisava saber é como restringir o envio a apenas arquivos de imagem tipo jpg, gif, png e também como restringir o tamanho dos arquivos exemplo 1MB?

vou postar o codigo que eu uso e se alguem puder me ajudar eu agradeço.

<!-- #include file="freeaspupload.asp" -->
<!-- #include file = "seg_con_banco.asp" -->

<% 
 Dim uploadsDirVar 
 uploadsDirVar = "caminho das fotos"  
%> 

<% 
npid = request.QueryString("npid")
function SaveFiles 
       Dim Upload, fileName, fileSize, ks, i, fileKey 

       Set Upload = New FreeASPUpload 
       Upload.Save(uploadsDirVar) 

       ' If something fails inside the script, but the exception is handled 
       If Err.Number<>0 then Exit function 

       SaveFiles = "" 
       ks = Upload.UploadedFiles.keys 

if (UBound(ks) <> -1) then 
imagem = "ImagensPerfil/" & Upload.UploadedFiles("procurar").FileName 
End If 

SQLup = "UPDATE tab_usuario_cadastro SET foto_perfil = '" & imagem & "' WHERE id_usuario ="& npid &""
'response.Write SQLup
conn.Execute(SQLup) 

'SQL="UPDATE tab_usuario_cadastro SET foto_perfil='"& imagem &"' id_usuario ="& request.QueryString("npid") &"" 
'conexao.Execute(SQL) 
'conn.Execute(SQL)

end function 

response.write SaveFiles() 

Response.Write("<meta http-equiv='refresh' content='0;URL=updatefoto.asp' />")
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dae lucas...

tem um exemplo, de upload , com a função de renomear antes de fazer o upload, você pode pegar a função e implementar no seu code, é um FSO simples, sei que pelo DUndas e alguns outros componentes tem uma propriedade especifica para isso, olha este exemplo

 

formulario.html

<HTML>
<HEAD>
<TITLE>Formulário de Upload</TITLE>
</HEAD>
<BODY>
<div align="center"><B>Envie sua foto!</b>
</div>
<FORM METHOD="Post" ENCTYPE="multipart/form-data" ACTION="outputFile.asp">

 <div align="center">Arquivo:
   <INPUT TYPE="file" NAME="blob">
   <BR>
   <INPUT NAME="Enter" TYPE="submit" value="Enviar">
 </div>
</FORM>

</BODY>
</HTML>

 

upload.asp

 

<%

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))
           filename = hour(time) & minute(time) & day(date) & month(date) & year(date) & filename
           '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
%>

 

 

outputfile.asp

 

<%

Response.Expires=0
Response.Buffer = TRUE
Response.Clear
'Response.BinaryWrite(Request.BinaryRead(Request.TotalBytes))
byteCount = Request.TotalBytes
'Response.BinaryWrite(Request.BinaryRead(varByteCount))

RequestBin = Request.BinaryRead(byteCount)
Dim UploadRequest
Set UploadRequest = CreateObject("Scripting.Dictionary")

BuildUploadRequest  RequestBin

contentType = UploadRequest.Item("blob").Item("ContentType")
filepathname = UploadRequest.Item("blob").Item("FileName")
filename = Right(filepathname,Len(filepathname)-InstrRev(filepathname,"\"))

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

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

'Create and Write to a File
pathEnd = Len(Server.mappath(Request.ServerVariables("PATH_INFO")))-14
Set MyFile = ScriptObject.CreateTextFile(Left(Server.mappath(Request.ServerVariables("PATH_INFO")),pathEnd)&filename)

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

MyFile.Close
%>
<p align="center"><b>Uploaded file : </b><%=filename%><BR>
 <img src="<%=filename%>">
 <!--#include file="upload.asp"-->
</p>

esta linha renomeia o arquivo

 

filename = hour(time) & minute(time) & day(date) & month(date) & year(date) & filename

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao tenho tanta experiencia nisso nao entendi ao certo como fazer este processo que você falou, eu ja utilizei um outro script de upload sem componente e eu modificava o nome de forma bem facil sem precisar usar nada, mas neste novo servidor nao da para utiliza-lo, se você puder me dar uma força com este script meu pois nao entendi mesmo como fazer-lo

Compartilhar este post


Link para o post
Compartilhar em outros sites

o code que postei acima, jah faz isso e nao usa nenhum componente, mas verifique junto ao seu componente, pois a maioria tem uma propriedade que pode mudar o nome, tipo aquela propriedades do Dundas.Upload

Compartilhar este post


Link para o post
Compartilhar em outros sites

o code que postei acima, jah faz isso e nao usa nenhum componente, mas verifique junto ao seu componente, pois a maioria tem uma propriedade que pode mudar o nome, tipo aquela propriedades do Dundas.Upload

amigo este script funcionou legal aqui, so não entendi como faço para mudar o caminho que as imagens serão salvas e como eu gravo no banco de dados o nome das imagens que foram enviadas.

você poderia me dar uma ajuda?

Compartilhar este post


Link para o post
Compartilhar em outros sites

mude apenas o caminho e para o nome ou caminho a ser gravado no banco use as variaveis filepathname e filename

Compartilhar este post


Link para o post
Compartilhar em outros sites

para evitar este tipo de problema recomendo alterar sempre para ter o nome do arquivo junto a sequencia que forma a datahora do upload assim garante que não terá duplicidade

 

ou seja voce faz o upload normalmente e logo em seguida renomeia para ANO_MES_DIA_HORA_MINUTO_SEGUNDO_NOMEDOARQUIVO

 

Ficando como exemplo

 

2011_11_04_17_36_34_Arquivo_Nome

 

Ou algo semelhante a isso

 

Pode renomear usando FSO alterar o parametro name do arquivo apenas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigos, obrigado pela ajuda, consegui resolver o problema de modificar o nome ao fazer o upload mas ainda estou com um pequeno problema.

ja fiz as validações de qual arquivo pode ou nao ser enviado tipo so fotos .jpg, .gif também verifiquei se existe algum arquivo selecionado, mas preciso de uma ultima validação que no caso é o tamanho do arquivo enviado porque preciso que aceite apenas arquivos de até 2MB, como faço está validação?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A pagina oficial diz que não há esta limitação

 

http://www.freeaspupload.net/

 

Upload a file and see that there are no limits on speed or maximum file size.

 

Na internet há referencias sobre o uso de uma variavel chamada m_lMaxFileSize que entretanto nunca usei e também não encontrei um exemplo funcionando

Compartilhar este post


Link para o post
Compartilhar em outros sites

A pagina oficial diz que não há esta limitação

 

http://www.freeaspupload.net/

 

Upload a file and see that there are no limits on speed or maximum file size.

 

Na internet há referencias sobre o uso de uma variavel chamada m_lMaxFileSize que entretanto nunca usei e também não encontrei um exemplo funcionando

não teria uma forma de fazer um javascript que verifique antes do upload ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Achei estes dois exemplos

 

O primeiro diz que tem a restrição de só funcionar no IE

 

E o segundo nunca testei mas alteraria configuração do server através do Web.config

 

Manda ver nos testes

 

http://www.babooforum.com.br/forum/index.php?/topic/736091-validar-tamanho-de-arquivo/

 

http://ajuda.uolhost.com.br/index.php?p=resposta&res=760#rmcl

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha uma função legal para criar nomes, essa postei no lab. de script

 

Um exemplo dos nomes dos arquivos criados pela função pode ser:

0234254326346346.TXT (você pode especificar sua extensão, também)

 

 

sintaxe:

 

<%
function GetRndNomeArq(byval dotextension)
   randomize
   getfilename = _
       clng(clng(timer * Rnd(timer)) + timer) & _
       clng(clng(timer * Rnd(timer)) + timer) & _
       clng(clng(timer * Rnd(timer)) + timer) & dotextension
end function
%>

 

e também tem um exemplo no lab. que coloquei que você pode especificar qual tipo de arquivo será feito upload

Compartilhar este post


Link para o post
Compartilhar em outros sites

xan ele já resolveu o problema dos nomes está com outra situação como pode ler nos últimos posts

Compartilhar este post


Link para o post
Compartilhar em outros sites

alguem?

 

Me confundi, em um post você diz que só quer arquivos de "até 2MB", certo? e o Mário Monteiro diz que não há essa limitação e está direcionando para permitir mais do que 2MB certo?

 

Bem, para permitir mais do que 2MB, em um trabalho que fiz, utilizei

<?xml version="1.0" encoding="iso-8859-1"?>
<configuration>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="15728640"/>
</requestFiltering>
</security>
</system.webServer>
</configuration>

 

e usei o DUNDAS, assim, lembrando que o método do form deve ser POST:

	
Function SaveFilesDundas
On Error Resume Next

Dim sCaminho, strErrorLine

sCaminho = strCaminhoFisico & "arquivos\edicoes\pdf"

' Criar instancia do Objeto
Set objUpload = Server.CreateObject ("Dundas.Upload.2")

' Gravar arquivo no diretorio dados do proprio site
' Tambem sera gravado em memoria utilizando o metodo SaveToMemory
'
' Tamanho maximo de arquivo de 15MB
objUpload.MaxFileSize=15728640
objUpload.UseUniqueNames=FALSE
objUpload.Save sCaminho

' Verificar se ocorreu algum erro durante a chamada.
' Se ocorrer, redirecionar para uma pagina de Erro ficticia
		set objError = Server.GetLastError()
	strErrorLine =  objError.Line

If Err.Number <> 0 Then
	outputFormDunda()
	'Response.Redirect "Erro_dundasupload.asp"
		Response.Write("Houve um erro e o upload dos arquivos não foi efetuado.<br>")
		Response.Write("Descrição do erro: " & Err.Description)
		Response.Write("<br>Número do erro: " & Err.Number )	
	Response.Write("<br>Número da linha: " & strErrorLine )
Else
' Criar um loop para verificar os arquivos carregados
' Se for executavel, apagar do disco
' Mostrar uma caixa de diálogo com nome dos arquivos
For Each objUploadedFile in objUpload.Files
Response.Write "campo "" & objUploadedFile.TagName & "" do Formulario - Caminho : " & objUploadedFile.Path & " - Tamanho : " & CStr(objUploadedFile.Size) & " bytes<br>"
If InStr(1,objUploadedFile.ContentType,"octet-stream") Then
Response.Write " MAS O Arquivo foi REMOVIDO por ser um tipo proibido"
objUploadedFile.Delete
End If
Next

' Mostrar o nome de cada um dos elementos do formulário
For Each objFormItem In objUpload.Form.Count
 Response.Write "<br>Item passado no formulário e´: " & objFormItem.Value
 Response.Write "<br> Valor do ítem do formulário e´: " & objFormItem.Value & "<br>"
Next

Response.Write "Chegou ao final do script"

End If

' Remover o objeto
Set objUpload = Nothing

end Function

 

 

Para restringir, uso um campo hidden no form:

<input type="hidden" name="tamanhoMaximo" value="2000000">

 

e crio uma variável em javascript para marcar as extensoes permitidas

ExtensoesPermitidas= "gif,jpg,jpeg,bmp,png,doc,xls,pdf,zip,flv";

 

depois uso a função para validar o form que peguei na interner há um bom, tempo, em um fórum, mas não sei a fonte:

function checaTipo(obj) { 
if (obj.length == 0) 
	return true;
if (typeof ExtensoesPermitidas== "undefined")
	return true;  
var Tipos= ExtensoesPermitidas.split(","); 
var ext = obj.substring(obj.lastIndexOf(".")+1, obj.length).toLowerCase(); 
for (var i=0; i < Tipos.length; i++) { 
	if (Tipos[i] == ext) 
		return true; 
} 
return false; 
}

 

você vai testar se retorna true ou false para o tipo de arquivo que vem do form, se não for permitido ela retorna false e seu formulário não é enviado:

if (seucamponoform!="" && !checatipo(valordoseucamponoform)) { 
//mensagem de erro
return false; 
}

 

Bem, acho que é isso, espero que o código possa ser útil de alguma forma!

 

alguem?

 

Me confundi, em um post você diz que só quer arquivos de "até 2MB", certo? e o Mário Monteiro diz que não há essa limitação e está direcionando para permitir mais do que 2MB certo?

 

Bem, para permitir mais do que 2MB, em um trabalho que fiz, utilizei

<?xml version="1.0" encoding="iso-8859-1"?>
<configuration>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="15728640"/>
</requestFiltering>
</security>
</system.webServer>
</configuration>

 

e usei o DUNDAS, assim, lembrando que o método do form deve ser POST:

	
Function SaveFilesDundas
On Error Resume Next

Dim sCaminho, strErrorLine

sCaminho = strCaminhoFisico & "arquivos\edicoes\pdf"

' Criar instancia do Objeto
Set objUpload = Server.CreateObject ("Dundas.Upload.2")

' Gravar arquivo no diretorio dados do proprio site
' Tambem sera gravado em memoria utilizando o metodo SaveToMemory
'
' Tamanho maximo de arquivo de 15MB
objUpload.MaxFileSize=15728640
objUpload.UseUniqueNames=FALSE
objUpload.Save sCaminho

' Verificar se ocorreu algum erro durante a chamada.
' Se ocorrer, redirecionar para uma pagina de Erro ficticia
		set objError = Server.GetLastError()
	strErrorLine =  objError.Line

If Err.Number <> 0 Then
	outputFormDunda()
	'Response.Redirect "Erro_dundasupload.asp"
		Response.Write("Houve um erro e o upload dos arquivos não foi efetuado.<br>")
		Response.Write("Descrição do erro: " & Err.Description)
		Response.Write("<br>Número do erro: " & Err.Number )	
	Response.Write("<br>Número da linha: " & strErrorLine )
Else
' Criar um loop para verificar os arquivos carregados
' Se for executavel, apagar do disco
' Mostrar uma caixa de diálogo com nome dos arquivos
For Each objUploadedFile in objUpload.Files
Response.Write "campo "" & objUploadedFile.TagName & "" do Formulario - Caminho : " & objUploadedFile.Path & " - Tamanho : " & CStr(objUploadedFile.Size) & " bytes<br>"
If InStr(1,objUploadedFile.ContentType,"octet-stream") Then
Response.Write " MAS O Arquivo foi REMOVIDO por ser um tipo proibido"
objUploadedFile.Delete
End If
Next

' Mostrar o nome de cada um dos elementos do formulário
For Each objFormItem In objUpload.Form.Count
 Response.Write "<br>Item passado no formulário e´: " & objFormItem.Value
 Response.Write "<br> Valor do ítem do formulário e´: " & objFormItem.Value & "<br>"
Next

Response.Write "Chegou ao final do script"

End If

' Remover o objeto
Set objUpload = Nothing

end Function

 

 

Para restringir, uso um campo hidden no form:

<input type="hidden" name="tamanhoMaximo" value="2000000">

 

e crio uma variável em javascript para marcar as extensoes permitidas

ExtensoesPermitidas= "gif,jpg,jpeg,bmp,png,doc,xls,pdf,zip,flv";

 

depois uso a função para validar o form que peguei na interner há um bom, tempo, em um fórum, mas não sei a fonte:

function checaTipo(obj) { 
if (obj.length == 0) 
	return true;
if (typeof ExtensoesPermitidas== "undefined")
	return true;  
var Tipos= ExtensoesPermitidas.split(","); 
var ext = obj.substring(obj.lastIndexOf(".")+1, obj.length).toLowerCase(); 
for (var i=0; i < Tipos.length; i++) { 
	if (Tipos[i] == ext) 
		return true; 
} 
return false; 
}

 

você vai testar se retorna true ou false para o tipo de arquivo que vem do form, se não for permitido ela retorna false e seu formulário não é enviado:

if (seucamponoform!="" && !checatipo(valordoseucamponoform)) { 
//mensagem de erro
return false; 
}

 

Bem, acho que é isso, espero que o código possa ser útil de alguma forma!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Neste caso eu utilizei como upload o ASPFREEUPLOAD e preciso limitar o tamnho dos uploads para nao sobrecarregar a pagina.

preciso permitir fotos que tenham um tamanho fisico de até 2MB entenderam oque quero fazer ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

você verificou no manual do componente, para ver esta propriedade

Compartilhar este post


Link para o post
Compartilhar em outros sites

você verificou no manual do componente, para ver esta propriedade

existe uma propriedade na função que fica bem no inicio ela tem o tamanho maximo provavelmente, mas não esta respeitando este espaço pois enviei uma imagem de 3,5mb e foi.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lucas, talvez você possa fazer uso do getFileSize para saber o tamanho do arquivo, e fazer uma comparação, tem algo neste post (http://p2p.wrox.com/classic-asp-basics/1848-get-file-size-into-variable.html)

 

comparando assim:

 

If tamanhodoseuarquivo > 0 And CLng(tamanhomaximopermitido) > 0 Then
		If tamanhodoseuarquivo > CLng(tamanhomaximopermitido) Then
			Response.Write Replace("Tamanho Maximo do arquivo (%s bytes) excedido.", "%s", tamanhomaximopermitido)
			Response.End
		End If
	End If

 

outra possibilidade que visualizei é talvez colocar o teste dentro da própria classe ou uma function:


Set objFS = CreateObject("Scripting.FileSystemObject")
Set f = objFS.GetFile(caminho& fileItem.FileName) 
tamnho = f.size

If tamanho <= tamanhomaximopermitido Then
... restante dos códigos ...

 

salvo engano, já vi isso em um script antigo chamado i-gallery, dá uma pesquisada creio que irá te ajudar muito...

 

sds

Compartilhar este post


Link para o post
Compartilhar em outros sites

e para otimizar o code, você pode usar uma função que realiza a conversão de bytes para Kb, Mb ou Gb dependendo do tamanho em bytes passados.

 

<%
Function getTamanho(ByVal Tamanho)
   On Error Resume Next
   Dim Retorno
   Tamanho = CLng(Tamanho)
   If IsNumeric(Tamanho) Then
       If Tamanho >= 1073741824 Then
           Retorno = Round(((Tamanho/1024)/1024)/1024,1)
           Retorno = Retorno & " Gb"            
       ElseIf Tamanho < 1073741824 And Tamanho >= 1048576 Then
           Retorno = Round((Tamanho/1024)/1024,1)
           Retorno = Retorno & " Mb"
       ElseIf Tamanho < 1048576 And Tamanho >= 1024 Then
           Retorno = Round((Tamanho/1024),1)
           Retorno = Retorno & " Kb"
       Else 
           Retorno = Round((Tamanho),1)
           Retorno = Retorno & " bytes"
       End If
   Else
       Retorno = "n/a"
   End If
   'Retornando a função
   getTamanho = Retorno
End Function

'e para usar a function
Response.Write "Tamanho do arquivo que fez UPLOAD:" & getTamanho(1073741824)
%>

 

 

Por exemplo:

 

- Se for passado 500 a função retornará "500 bytes"

- Para 1024 o retorno será "1 Kb"

- Para 1048576 o retorno será "1 Mb"

- Para 1073741824 o retorno será "1 Gb"

 

assim fica mais agradável ao user

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.