Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou com um problema em minhas mãos que não estou conseguindo achar a solução!
é o seguinte, estou com um arquivo que se chama ex: arquivo.doc (poderá ser qualquer extensão)
O cliente deseja o seguinte.
Quando ele for inserir esse arquivo por formulário ele irá colocar o "cliente", o "fornecedor" e o "comprador" e selecionará o "arquivo.doc" e fará o upload, até ai tudo bem, o nome do arquivo é salvo no banco de dados, o do cliente, fornecedor e comprador também
Tudo funcionando perfeitamente, quando "forço" o download deste arquivo.doc ele baixa normal porém a questão é!
Esse arquivo deve ser renomeado conforme o "cliente", "fornecedor" ou "comprador" ué mas como assim?
Ex: Eu sou o Cliente X então quando eu quiser baixar esse "arquivo.doc" ele deverá vir para mim como "x.doc"
Se eu logar como fornecedor no sistema esse "arquivo.doc" deverá ser baixado como "y.doc" porém não quero "duplicar" o arquivo no servidor nem mudar o nome no banco de dados gostaria que ele baixa-se já com o nome certo...
Alguém tem alguma sugestão de como posso fazer isso? Sim eu acho que o pessoal poderia "redigitar" e pronto, o problema é, o nome ficará muito grande não terá acentos mas ficará grande, um exemplo? wmfcompForne1244863586258959364.xls esse é um nome do "fornecedor" o problema é que conforme a combinação de escolha do "cliente", "fornecedor" ou "comprador" esse nome pode ser ainda mais complicado, mas eu consigo fazer esse nome o problema é que quando ele vai baixar não consigo fazer baixar com esse nome o "arquivo.doc"
Será que conseguiram entender a minha dúvida?
por exemplo eu uso um código para forçar o download que é esse aqui.
public function download(arquivo, pasta)
dim objStream
set objStream = server.createObject("ADODB.Stream")
with (response)
.buffer = true
.addHeader "Content-Type","application/x-msdownload"
.addHeader "Content-Disposition","attachment; filename="&arquivo
.flush
end with
with (objStream)
.open
.type = 1
.loadFromFile server.mapPath(pasta&"/"&arquivo)
end with
response.binaryWrite objStream.read
set objStream = nothing
response.flush
end function
<a href="<% call download("&arquivo&", "pasta") %>">baixe aqui</a>
Esse é um exemplo do código que estou utilizando... se puderem me ajudar nisso, se puderem me dar sugestões ou de como posso fazer...
Eu já tentei fazer o seguinte, pegar o "arquivo.doc" e quando ele faz isso, eu uso o "left(arquivo,4)" para pegar a extensão do arquivo, e dai apenas "somo" a variavel do nome monstro que gerou... mas como fazer ele baixar o arquivo tal apenas renomeando, essa foi uma das tentativas, se tiverem uma solução melhor estou todo "ouvido"
Thanks a lot!
Edit1: Ah não sou um user novo só pra constar, esse é um usuário antigo na verdade, pois perdi a senha do meu que era o "nemtconto" e não consigo recuperar então tenho que postar com esse "outro"
Edit2: Se for o caso acredito que não teria problema em "duplicar" o arquivo ou "triplicar" no caso... porém se tiver como não fazer isso será melhor, já que a hospedagem que o cliente possui existe um "limite" de espaço e tráfego ai já viu se passar né =) Ah e por sinal é bem podre e CARO ja tentei fazer ele mudar de idéia mas falou que o host é de um amigo e por isso ajuda ele e aquela história de sempre...
existe uma função no forum, que você pode renomear de acordo com seu critério ou gerar nomes, pode te ajudar
>
existe uma função no forum, que você pode renomear de acordo com seu critério ou gerar nomes, pode te ajudar
Obrigado pessoal, vou fazer alguns testes com isso, vou procurar o que o xanburzum falou também, apesar de não ter encontrado antes vou tentar novamente.
Obrigado de novo..
PS: Xan se tiver como posta o link aqui para mim ou para alguma outra pessoal que chegue até esse tópico já tenha o link!
Gracias!
prcure por gerar nomes ou renoear
>
li na corrida seu topico, pelo que entendi você tem um nome de arquivo no servidor mas no momento do download você precisa baixar outro nome. Se for isso basta mudar esta linha
de
.addHeader "Content-Disposition","attachment; filename="&arquivo
para
.addHeader "Content-Disposition","attachment; filename=nomequeeuquero" & mid(arquivo, instrrev(arquivo, ".")
Obrigado pelo help, só faltou uma coisa no código
.addHeader "Content-Disposition","attachment; filename="&nomequeeuquero&"" & mid(arquivo, instrrev(arquivo, "."))
Porém funciona certinho, já resolvi utilizando essa linha e algumas outras coisas aqui porém rodou perfeito!
Segue o código abaixo!
PRIMEIRO SELECIONO O TIPO DE DOWNLOAD
<a class="LinkBranco" href="pagina.asp?tipo=wmf&id=<%=id%>">WMF</a> - <a class="LinkBranco" href="pagina.asp?tipo=campox&id=<%=id%>">FORNECEDOR</a> - <a class="LinkBranco" href="pagina.asp?tipo=campoy&id=<%=id%>">CLIENTE</a>
DEPOIS DISSO INDO PARA A PÁGINA.ASP RECUPERO AS VARIÁVEIS AONDE MUDA O NOME DO ARQUIVO DE ACORDO COM A NECESSIDADE
id = request("id")
tipo = request("tipo")
set recOF = server.CreateObject( "ADODB.recordset")
SQL = "SELECT * FROM job WHERE id_job="&id
recOF.open SQL, conbanco
'RESGATA O ARQUIVO UPADO E GRAVADO O NOME DO BANCO EX: arquivo.pdf
Arquivo = recOF("arquivo")
'FUNÇÃO PARA RESGATAR(RENOMEAR) O NOME QUE DESEJO PARA ESSE arquivo.pdf
if tipo = "wmf" then
nomequeeuquero = recOF("wmf")
else if tipo = "campox" then
nomequeeuquero = recOF("campox")
else if tipo = "campoy" then
nomequeeuquero = recOF("campoy")
end if
end if
end if
Response.Buffer = True
Response.AddHeader "Content-Type","application/x-msdownload"
Response.AddHeader "Content-Disposition","attachment; filename="&nomequeeuquero&"" & mid(Arquivo, instrrev(Arquivo, "."))
Response.Flush
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = 1
objStream.LoadFromFile Server.MapPath(Arquivo)
Response.BinaryWrite objStream.Read
objStream.Close
Set objStream = Nothing
Response.Flush
Rodou perfeito, se alguém tiver dúvida basta postar ai!
O código de download fiz algumas "mudanças" nele para rodar de acordo, não achei no forum então fica ai a dica também
Uma coisa... o código funciona certinho
porém quando vou fazer isso com uma IMG, DOC ou XLS ele faz NORMAL porém quando ABRO o arquivo vem cheio daquelas letras "zuadas" além de que a IMG não mostra, PORÉM o PDF é o único que vem intacto... será que alguém saberia dizer qual o erro?
sempre utilizei esse abaixo e nunca me deu problema. testa aí e modifica para o que quer
abs
<%
Function getFileName(ByVal fileName)
dim fso, file
set fso = server.createObject("Scripting.FileSystemObject")
set file = fso.getFile(fileName)
getFileName = file.name
set file = nothing
set fso = nothing
End Function
Function downloadFile(file)
Server.ScriptTimeout = 30000
Dim fileSize
Dim chunk
Dim i
Dim objStream
Dim ContentType
Dim extensaoArquivo
Const DIRETORIO_UPLOAD = "c:\inetpub\wwwroot\site\downloads"
chunk = 2048
If file <> "" Then
Dim FileExt
Const adTypeBinary = 1
FileExt = Lcase(Trim(Mid("" & file, InStrRev("" & file, "."))))
Select Case UCase(FileExt)
Case "ASP", "ASA", "ASPX", "ASAX", "MDB"
Response.Write "Não é possível acessar esse tipo de arquivo."
Response.End
end select
Response.Clear
Response.ContentType = "application/octet-stream"
Response.Addheader "content-disposition", "attachment; filename=" & getFileName(DIRETORIO_UPLOAD & "\" & file)
Set objStream = server.CreateObject("ADODB.Stream")
objStream.type = adTypeBinary
objStream.open
objStream.LoadFromFile DIRETORIO_UPLOAD & "\" & file
On Error Resume Next
While not objStream.EOS
Response.BinaryWrite objStream.Read(1024 * 64)
Wend
On Error GoTo 0
objStream.Close
Set objStream = Nothing
Response.Flush
Response.End
end if
End Function
'uso
downloadFile(request.QueryString("nomedoarquivodesejado"))
%>
Thanks again Jonathan... vou fazer uns testes aqui e volto com o resultado daqui a pouco!
Então o código funciona perfeitamente, mesmo modificando do jeito que preciso, porém ele da o mesmo erro que o que eu fiz para caso o nome seja renomeado, e se uso esse código seu quanto o meu para baixar o arquivo sem renomear funciona certinho... porém como disse se usar para "renomar" ele faz isso nos arquivos enfia uma monte de letra zuada, e no único que isso não acontece é no PDF
CODIGO FINAL, FUNCIONANDO 100% SEM ERROS
ABAIXO!
tipo = request("tipo")
if tipo = "wmf" then
nomequeeuquero = recOF("wmf")
else if tipo = "campox" then
nomequeeuquero = recOF("campox")
else if tipo = "campoy" then
nomequeeuquero = recOF("campoy")
end if
end if
end if
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(Server.MapPath("NOMEDAPASTA"))
'Response.Write objFolder.Size & "em byte" 'Retorna o tamanho total da pasta, incluindo todos os seus arquivos.
Set fc = objFolder.Files
totalArq = fc.count
tamArq = Server.MapPath (".") & "\" & objFolder.Name
Set arqObj = objFSO.GetFile(tamArq&"\"&recOF.fields("arquivo"))
if arqObj <> "" then
'--------------------------------------------------------------------------
Response.Buffer = True
Dim strFilePath, strFileSize, strFileName
Const adTypeBinary = 2
strFilePath = "O CAMINHO DA IMG"
strFileName = arqObj.Name
Caminho = strFilePath + strFileName
Response.Clear
strFileType = lcase(Right(strFileName, 4))
Select Case strFileType
Case ".doc"
ContentType = "application/msword"
case ".ppt", ".pps",".pptm"
ContentType = "application/x-powerpoint"
Case ".txt"
ContentType = "text/plain"
Case ".zip"
ContentType = "application/zip"
Case ".xls"
ContentType = "application/vnd.ms-excel"
Case ".gif"
ContentType = "image/gif"
Case ".jpg", "jpeg"
ContentType = "image/jpeg"
Case ".rtf"
ContentType = "application/rtf"
Case ".htm", "html"
ContentType = "text/html"
Case ".pdf"
ContentType = "application/pdf"
Case Else
ContentType = "application/octet-stream"
End Select
Response.Buffer = True
Response.ContentType = ContentType
Response.AddHeader "Content-Disposition","attachment; filename="&nomequeeuquero&"" & mid(strFileName, instrrev(strFileName, "."))
Response.Flush
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = 1
objStream.LoadFromFile Caminho
Response.BinaryWrite objStream.Read
objStream.Close
Set objStream = Nothing
Response.Flush
end if
Lembrando que trago o nome do arquivo por variável, então se você tem uma pequena noção de ASP já irá saber como utilizar o código acima! Mesmo assim, dúvidas basta perguntar que irei responder!
li na corrida seu topico, pelo que entendi você tem um nome de arquivo no servidor mas no momento do download você precisa baixar outro nome. Se for isso basta mudar esta linha
de
.addHeader "Content-Disposition","attachment; filename="&arquivo
para
.addHeader "Content-Disposition","attachment; filename=nomequeeuquero" & mid(arquivo, instrrev(arquivo, ".")