Ir para conteúdo
Fórum Script Brasil
  • 0

Anexar Arquivo


vulmarjunior

Pergunta

alguém já fez um formulário de contato em asp e colocou um opção de anexar arquivos e enviar para o destinatário.

Eu tenho mais ou menos uma idéia de como fazer, mas não tenho muita certeza, por isso se alguém já tiver feito e me puder me dizer como fazer ficaria grato.

Uso tanto o Cdonts quanto o ASPmail.

Valeu

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

Bom cara, se você precisa apenas saber o caminho onde sera copiado o arquivo anexo:

Crie uma página html:

<html><body>

<form action="SuaPagina.asp" enctype="multipart/form-data" method="post">

Arquivo:

<input type="file" name="test">

<input type="submit" value="Enviar">

</form>

</body>

</html>

O form acima abre uma caixa de dialogo solicitando que procure o arquivo a ser anexado

No outro form(asp) você pode pegar o caminho assim:

Anexo = Request.Form("test")

Ai basta usar o metódo do Cdonts de anexar arquivo.

Espero que seja isto.Ultimamente ando sendo mal interpretado neste fórum.

Link para o comentário
Compartilhar em outros sites

  • 0

Cara eu já tentei fazer isso, mas não fuciona pois como o script que processa o email está hospedado em outro servidor e o sistema de anexo busca um caminho físico. Dai o que acontece quando eu armazeno o caminho fisico da minha máquina na variável Anexo, como você indicou, ele não enconta o arquivo no servidor e então não anexa.

Por isso falei em upload, pois com o arquivo no servidor eu posso indicar o caminho fisico e anexa-lo

Link para o comentário
Compartilhar em outros sites

  • 0

Brother!!!

Deixo ver se entendi:

Sua pagina do formulario esta em um Host, o processamento é realizado em uma outra página e você precisa anexar um arquivo ou enviar uma imagem via email ?

Se for isto vamos tentar entender a solução para o problema:

Se a imagem for enviada para o HOST2 (Host de envio de email) precisamos de UpLoad, após o envio da imagem, os dados coletados do formulario podem ser colocados em Session, e ultilizados futuramente para envio do email.

Se a imagem esta no Host 1 e você deseja que ela apareça no seu email, você pode colocar um campo na formatação da sua imagem como se fosse um link.

Ex: "http://www.sitedourso.com.br/_img/_anexo/_urso_gatao.jpg".

Não sei resolve seu problema, mas é possivel se fazer desta forma.

Abraços!!!

[urso]

Link para o comentário
Compartilhar em outros sites

  • 0

Acho que estou sendo confuso.

O que estou tentando faze é o seguinte:

Tenho um form de contato contato.htm que envia as informações para enviar.asp onde são processadas e enviadas por email para mim.

O que quero é disponibilizar para quem acessa meu form de contato um meio de anexar arquivos e enviá-los para mim.

Porem a minha página é hospedada no bighost e não em meu computador.

Então pelo que estava imaginando, o usuário do meu site teria que atraves do form fazer o upload do arquivo para om servidor e no script de email eu teria que informar comoa anexo esse arquivo que ele enviou para mim.

Espero ter sido mais claro agora, agradeço a ajuda de todos.

Link para o comentário
Compartilhar em outros sites

  • 0

Realmente , o arquivo a ser anexado tem que estar no servidor. Se você pode instalar algum componente de Upload em seu servidor , eu sugiro o AspUpload http://www.aspupload.com/ . Caso você não possa instalar nenhum componente , estou enviando um código para upload sem componente.Eu teste e ele funcionou.

Código do Form que seleciona o arquivo:

=========================

<html><body>
<form action="upload.asp" enctype="multipart/form-data" method="post">
Arquivo:
<input type="file" name="test">
<br>
<input type="radio" name="filename" value="original" checked> Usar o nome original
<br>
<input type="radio" name="filename" value="userSpecified"> Usar o nome:
<input type="text" name="userSpecifiedName" value="">
<br>
<input type="submit" value="Enviar">
</form>
</body>
</html>
Código do Form que faz upload: =========================
<%
' Ajuste o timeout conforme o tamanho 
' dos arquivos que você irá aceitar
server.scripttimeout = 5400

'Caminho virtual onde os arquivos devem ser salvos no servidor
filePathDefault = "./"

const ForWriting = 2
const TristateTrue = -1
crlf = chr(13) & chr(10)

' Esta função recupera o nome do campo do formulário
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 nome do arquivo
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 tipo mime do arquivo
function getFileType( infoStr)
    sPos = inStr( infoStr, "Content-Type: ")
    getFileType = mid( infoStr, sPos + 14)
end function

' Lê o arquivo o arquivo e tudo mais que foi enviado
postData = ""
Dim biData
biData = Request.BinaryRead(Request.TotalBytes)
' Como o arquivo é binário, iremos armazená-lo
' numa variável mais controlável
for nIndex = 1 to LenB( biData)
    postData = postData & Chr(AscB(MidB( biData, nIndex, 1)))
next

' Como os dados foram lidos de uma forma binária (BinaryRead), a instrução Request.Form 
' não está mais disponível. Portanto, será necessário processar as variáveis manualmente.
' Primeiro, será verificado o tipo de codificação.
contentType = Request.ServerVariables( "HTTP_CONTENT_TYPE")
ctArray = split( contentType, ";")
' O envio de arquivos somente funciona com a codificação
' "multipart/form-data", por isso vamos checar se esse foi a codificação usada.
if trim(ctArray(0)) = "multipart/form-data" then
    errMsg = ""
    ' Armazene o conteúdo do formulário ...
    bArray = split( trim( ctArray(1)), "=")
    boundry = trim( bArray(1))
    ' ... divida as variáveis
    formData = split( postData, boundry)
    ' agora, nós precisamos extrair a informação de cada variável.
    dim myRequest, myRequestFiles(9, 3) 
    Set myRequest = CreateObject("Scripting.Dictionary")
    fileCount = 0
    for x = 0 to ubound( formData)
  ' duas marcas "crlf" indicam o final da informação sobre campo
  ' tudo depois dele é o valor
  infoEnd = instr( formData(x), crlf & crlf)
  if infoEnd > 0 then
      ' lê as informações do campo...
      varInfo = mid( formData(x), 3, infoEnd - 3)
      ' lê o valor do campo
      varValue = mid( formData(x), infoEnd + 4, len(formData(x)) - infoEnd - 7)
      ' verifica se ele é um arquivo
      if (instr( varInfo, "filename=") > 0) then
    myRequestFiles( fileCount, 0) = getFieldName( varInfo)
    myRequestFiles( fileCount, 1) = varValue
    myRequestFiles( fileCount, 2) = getFileName( varInfo)
    myRequestFiles( fileCount, 3) = getFileType( varInfo)
    fileCount = fileCount + 1
      else
    ' outro tipo de campo
    myRequest.add getFieldName( varInfo), varValue
      end if
  end if
    next
else
    errMsg = "Tipo de codificação inválido!"
end if 

' Salva o arquivo enviado
set lf = server.createObject( "Scripting.FileSystemObject")
if myRequest("filename") = "original" then
    ' Usa o nome do arquivo original
    browserType = UCase( Request.ServerVariables( "HTTP_USER_AGENT"))
    if (inStr(browserType, "WIN") > 0) then
  ' Sistema Windows
  sPos = inStrRev( myRequestFiles( 0, 2), "\")
  fName = mid( myRequestFiles( 0, 2), sPos + 1)
    end if
  ' Sistema Mac
    if (inStr(browserType, "MAC") > 0) then
  fName = myRequestFiles(0, 2)
    end if
    ' Caminho onde os arquivos devem ser salvos
    filePath = filePathDefault & fName
else
    ' use o nome especificado pelo usuário
    ' Caminho do arquivo
    filePath = filePathDefault & myRequest("userSpecifiedName")
end if
savePath = server.mapPath( filePath)
set saveFile = lf.createtextfile(savePath, true)
saveFile.write( myRequestFiles(0, 1))
saveFile.close
%>
<html>
<body>
<% if errMsg = "" then %>
    Arquivo enviado com sucesso!
<%else %>
    Erro no envio do arquivo!<br>
    <%= errMsg %>
<% end if %>
</body>
</html>

Vale lembrar que o diretorio deve ter permissão de escrita.

PS: Este código não fui eu quem desenvolveu e não sei a quem dar os créditos.

Link para o comentário
Compartilhar em outros sites

  • 0

Caro Décio

Não sou especialista em asp, mas achei muito legal este procedimento. Funcionou direitinho, porém preciso saber como faço pra enviar outros campos juntos, como nome, empresa, e-mail, etc. Como o form não aceita mais de uma action, tentei fazer onclick no botão enviar, porém não funcionou. O servidor usa o formmail.pl

Agradeço desde já sua ajuda. :rolleyes:

Realmente , o arquivo a ser anexado tem que estar no servidor. Se você pode instalar algum componente de Upload em seu servidor , eu sugiro o AspUpload http://www.aspupload.com/ . Caso você não possa instalar nenhum componente , estou enviando um código para upload sem componente.Eu teste e ele funcionou.

Código do Form que seleciona o arquivo:

=========================

<html><body>
<form action="upload.asp" enctype="multipart/form-data" method="post">
Arquivo:
<input type="file" name="test">
<br>
<input type="radio" name="filename" value="original" checked> Usar o nome original
<br>
<input type="radio" name="filename" value="userSpecified"> Usar o nome:
<input type="text" name="userSpecifiedName" value="">
<br>
<input type="submit" value="Enviar">
</form>
</body>
</html>
Código do Form que faz upload: =========================
<%
' Ajuste o timeout conforme o tamanho 
' dos arquivos que você irá aceitar
server.scripttimeout = 5400

'Caminho virtual onde os arquivos devem ser salvos no servidor
filePathDefault = "./"

const ForWriting = 2
const TristateTrue = -1
crlf = chr(13) & chr(10)

' Esta função recupera o nome do campo do formulário
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 nome do arquivo
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 tipo mime do arquivo
function getFileType( infoStr)
    sPos = inStr( infoStr, "Content-Type: ")
    getFileType = mid( infoStr, sPos + 14)
end function

' Lê o arquivo o arquivo e tudo mais que foi enviado
postData = ""
Dim biData
biData = Request.BinaryRead(Request.TotalBytes)
' Como o arquivo é binário, iremos armazená-lo
' numa variável mais controlável
for nIndex = 1 to LenB( biData)
    postData = postData & Chr(AscB(MidB( biData, nIndex, 1)))
next

' Como os dados foram lidos de uma forma binária (BinaryRead), a instrução Request.Form 
' não está mais disponível. Portanto, será necessário processar as variáveis manualmente.
' Primeiro, será verificado o tipo de codificação.
contentType = Request.ServerVariables( "HTTP_CONTENT_TYPE")
ctArray = split( contentType, ";")
' O envio de arquivos somente funciona com a codificação
' "multipart/form-data", por isso vamos checar se esse foi a codificação usada.
if trim(ctArray(0)) = "multipart/form-data" then
    errMsg = ""
    ' Armazene o conteúdo do formulário ...
    bArray = split( trim( ctArray(1)), "=")
    boundry = trim( bArray(1))
    ' ... divida as variáveis
    formData = split( postData, boundry)
    ' agora, nós precisamos extrair a informação de cada variável.
    dim myRequest, myRequestFiles(9, 3) 
    Set myRequest = CreateObject("Scripting.Dictionary")
    fileCount = 0
    for x = 0 to ubound( formData)
  ' duas marcas "crlf" indicam o final da informação sobre campo
  ' tudo depois dele é o valor
  infoEnd = instr( formData(x), crlf & crlf)
  if infoEnd > 0 then
      ' lê as informações do campo...
      varInfo = mid( formData(x), 3, infoEnd - 3)
      ' lê o valor do campo
      varValue = mid( formData(x), infoEnd + 4, len(formData(x)) - infoEnd - 7)
      ' verifica se ele é um arquivo
      if (instr( varInfo, "filename=") > 0) then
    myRequestFiles( fileCount, 0) = getFieldName( varInfo)
    myRequestFiles( fileCount, 1) = varValue
    myRequestFiles( fileCount, 2) = getFileName( varInfo)
    myRequestFiles( fileCount, 3) = getFileType( varInfo)
    fileCount = fileCount + 1
      else
    ' outro tipo de campo
    myRequest.add getFieldName( varInfo), varValue
      end if
  end if
    next
else
    errMsg = "Tipo de codificação inválido!"
end if 

' Salva o arquivo enviado
set lf = server.createObject( "Scripting.FileSystemObject")
if myRequest("filename") = "original" then
    ' Usa o nome do arquivo original
    browserType = UCase( Request.ServerVariables( "HTTP_USER_AGENT"))
    if (inStr(browserType, "WIN") > 0) then
  ' Sistema Windows
  sPos = inStrRev( myRequestFiles( 0, 2), "\")
  fName = mid( myRequestFiles( 0, 2), sPos + 1)
    end if
  ' Sistema Mac
    if (inStr(browserType, "MAC") > 0) then
  fName = myRequestFiles(0, 2)
    end if
    ' Caminho onde os arquivos devem ser salvos
    filePath = filePathDefault & fName
else
    ' use o nome especificado pelo usuário
    ' Caminho do arquivo
    filePath = filePathDefault & myRequest("userSpecifiedName")
end if
savePath = server.mapPath( filePath)
set saveFile = lf.createtextfile(savePath, true)
saveFile.write( myRequestFiles(0, 1))
saveFile.close
%>
<html>
<body>
<% if errMsg = "" then %>
    Arquivo enviado com sucesso!
<%else %>
    Erro no envio do arquivo!<br>
    <%= errMsg %>
<% end if %>
</body>
</html>

Vale lembrar que o diretorio deve ter permissão de escrita.

PS: Este código não fui eu quem desenvolveu e não sei a quem dar os créditos.

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...