Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, nos próximos dias estarei fazendo um sistema em asp simples que é um administrador logar e subir arquivos pra usuários baixarem, doc, pdf e etc, até ai tranquilo, o que estou pensando é no seguinte. Quando o admin sobe um arquivo pra pasta, geralmente eu crio uma pasta onde o nome dela seria o md5 da data que subiu para não criar duas pastas com o mesmo nome no servidor e após criada a pasta eu jogo esse arquivo la dentro. Quando uso pra imagem, eu faço um palavrão no nome da imagem e pronto, só vai exibir, nã otem outro uso, agora o doc estou pensando numa maneira de não trocar o nome do arquivo no servidor, dai pensei ou em criar pasta e armazenar cada arquivo em uma pasta, por exempo:
donwloads/06ca396d8ac2d438e5465ff3f1c5b008/nomedodoc.doc
ficaria melhor do que
downloads/06ca396d8ac2d438e5465ff3f1c5b008.doc
o que não quero é aparecer a tela "tem certeza que deseja baixar o arquivo "06ca396d8ac2d438e5465ff3f1c5b008.doc", pois é ficaria horrível.
o que vocês recomendam, criar a pasta dinamicamente como pensei ou será que existe alguma função que troca o nome do arquivo só na hora de baixar? teriam alguma outra sugestão?
Quanto ao armazenamento acho que o ideal seria analisar (quantidade) a longo prazo para uma melhor organização dos arquivos...
Agora pegando carona no post do hargon, vou passar abaixo um exemplo de como forçar o download do arquivo e renomeá-lo apenas para o usuário, preservando o nome original do arquivo no servidor, espero que ajude:
'Função para renomear o arquivo preservando a extensão. (Será utilizada mais abaixo);
'Nesta função, o novo nome é a data atual ex: "3102008.pdf" - Mas pode utilizar outros critérios...
Function renomear(nome)
Set objFso = Server.CreateObject("Scripting.FileSystemObject")
ext = objFso.GetExtensionName(nome)
newNome = Date()
newNome = Replace(newNome,"/","")
newNome = Replace(newNome," ","")
renomear = newNome &"."& ext
Set objFso = Nothing
End Function
'Aqui você recupera o nome do arquivo original (Form, QueryString, Session, etc...)
varFile = Request("valor")
'Abaixo a rotina para forçar o download do arquivo...
Response.Clear()
Response.AddHeader "Content-Type","application/x-msdownload"
Response.AddHeader "Content-Disposition","attachment; filename=" & renomear(varFile)
Response.Charset = "UTF-8"
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = 1
objStream.LoadFromFile Server.MapPath(varFile)
Response.BinaryWrite objStream.Read
Response.Flush
objStream.Close
Set objStream = Nothing
Abs
Po obrigado, vai ajudar sim, dessa forma eu gravo o nome original do arquivo no bd e na hora de baixar eu faço uma query e ja mando com o nome certo :). Acho que o número de arquivos não ficará tão grande assim, mas agora pensando bem acho que vou usar os dois, vopu criar uma pasta concatenando a data + o nome do cliente direcionado por exemplo download/2008_10_05_163359_cliente/arquivo.pdf assim fica até mais organizado para visualizar o ftp independente do bd, vou dar um gás aqui e depois posto o resultado, valeu pela força.
abraço,
Carneirinho
Armazenar em pastas é melhor, pois futuramente se possuir muitos arquivos em uma única pasta, vai ficar bem mais lento para você acessar via FTP, caso seja necessário.
Pesquisa aqui no Fórum sobre como forçar o download de um arquivo. Usando esse script você consegue substituir o nome do arquivo na hora de baixar.