Ir para conteúdo

POWERED BY:

Arquivado

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

Gustavo_nino

[Resolvido] Problema com Upload

Recommended Posts

Boa noite amigos, estou tendo um problema aqui em um script de upload, estou utilizando um script que o Valtim publicou aqui no forum, porem fiz algumas alterações que funcionam perfeitamente, que no caso seria enviar o arquivo para o servidor e gravar o nome do mesmo no db MySql.

 

Tudo vai normal quando o arquivo é pequeno, até uns 400kb, passando disso, como mp3, ou ate mesmo imagens acima de 600k ja da erro, no caso o arquivo é enviado normalmente, mas ele não salva o arquivo no banco de dados.

 

ja tentei usar Response.Flush no codigo, até chegou a passar batido sem dar erro, mas não gravou no banco o nome

 

segue o link para vocês efetuarem um teste http://www.difusorapirassununga.com.br/teste/

 

abaixo segue o codigo onde onde inseri a insert

 

<%
Dim PastadeDestino, Pasta
Pasta = Request.QueryString("folder")
PastadeDestino = Server.mapPath(Pasta)

Dim Form: Set Form = New ASPForm %>
<!--#INCLUDE FILE="upload.asp"-->
<!--#INCLUDE FILE="conexao.asp" -->
<% 
Server.ScriptTimeout = 999999
Form.SizeLimit = &HA00000

If Form.State = 0 Then
  Dim File, NomedoArquivo
  For Each File In Form.Files.Items
        If Len(File.FileName) > 0 Then
        NomedoArquivo = ArquivoNomeUnico(File.FileName, PastadeDestino)

        File.SaveAs PastadeDestino & "\" & NomedoArquivo
        Response.Write "<br>Arquivo salvo em <b>" & PastadeDestino & "</b> com o nome de <b>" & NomedoArquivo & "</b>"

        arquivo = "" & NomedoArquivo & ""
    
    Set grava_db = Server.CreateObject("ADODB.RecordSet")
    msql = "INSERT INTO teste (arquivo) VALUES ('" & arquivo & "')"
    Set grava_db = Conn.Execute(msql)
    
      End If
  Next

ElseIf Form.State > 10 then
  Const fsSizeLimit = &HD
  Select case Form.State
        case fsSizeLimit: response.write  "<br>Arquivo (" & Form.TotalBytes & "B) acima do tamanho (" & Form.SizeLimit & "B)<br>"
        case else response.write "<br>Ocorreram erros!<br>"
  end Select
End If
Dim gFS
Function ArquivoNomeUnico(NomedoArquivo, PastadeDestino)
  if isempty(gFS) then Set gFS = CreateObject("Scripting.FileSystemObject")
  Dim Contador, DestinoCompleto, NovoNome
  Contador = 1
  NovoNome = NomedoArquivo
  
  if gFS.FileExists(PastadeDestino & "\" & NovoNome) then
    Do 
        Contador = Contador + 1
        NovoNome = Contador & "-" & NomedoArquivo
    Loop while gFS.FileExists(PastadeDestino & "\" & NovoNome)
  end if
  ArquivoNomeUnico = NovoNome
End Function
'#######################################################
%>

Lembrando que arquivos pequenos ele envia normalmente e grava no banco como deve ser, apenas arquivos maiores que da problema, o tamanho maximo de arquivo aceito esta em 10mb

 

Alguem tem ideia do que pode estar acontecendo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifique com a sua hospedagem o limite de arquivos a serem "uplodeados"...

 

Att;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifique com a sua hospedagem o limite de arquivos a serem "uplodeados"...

 

Att;

 

Darkdemo ele envia quantos arquivos eu colocar, pode ser 1 ou 30, fiz esse teste enviando 30 arquivos de tamanho variado de 50 a 200kb e foram todos com sucesso e gravou no banco com sucesso, o erro so acontece quando envio arquivos maiores de 600k, a verdade o erro é so para gravar o nome no banco de dados, pois o arquivo é enviado normalmente, seja ele 700k ou 8mb vai para o servidor normal, mas ele acusa erro HTTP ai no sistema. quando eu utilizei o Response.Flush em um momento ele chegou a fazer o envio do arquivo sem dar erro, mas fez um registro em branco.

 

PS: Se eu remover o codigo seguinte que foi o que eu implantei para fazer a insersão no DB, ele envia o arquivo normalmente sem dar problema, mas claro não armazena no DB pois não tem o codigo responsavel por isso.

 

arquivo = "" & NomedoArquivo & ""
    
Set grava_db = Server.CreateObject("ADODB.RecordSet")
msql = "INSERT INTO teste (arquivo) VALUES ('" & arquivo & "')"
Set grava_db = Conn.Execute(msql)

Eu acredito que o script esteja perdendo o a variavel com o nome pelo tempo de upload, ja tentei usar varias coisas response.flush, response.buffer e nada vai, quando vai ele cria o registro sem valor no campo

 

PS2: Percebi agora tentando enviar um arquivo 200k e minha net deu uma variada e ficou lenta, ele tambem deu erro

 

mesmo estando com Server.ScriptTimeout = 999999

 

acredito que seja o problema de perder a variavel pelo tempo de espera, não sei se isso tem a ver, mas na minha cabeça no momento penso isso hehehe, alguma solução?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Me expressei mal......

Quis dizer para verificar o tamanho maximo do arquivo...

Todo servidor possui um limite de tamanho de arquivo...

 

Att;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Me expressei mal......

Quis dizer para verificar o tamanho maximo do arquivo...

Todo servidor possui um limite de tamanho de arquivo...

 

Att;

 

ai que ta, o arquivo é enviado normalmente seja ele 50kb ou 8 / 10mb, acesso o ftp e o arquivo esta la dentro da pasta certinho, o problema esta sendo inserir o nome do arquivo no banco de dados, e não o envio do arquivo para a pasta no server. ele da o erro somente quando o arquivo é grande ou demora para ser enviado, mas o arquivo vai normal e o insert que falha.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais ele não mostra nenhum erro?

 

Apresenta a mensagem de informação dizendo que o arquivo foi upado com sucesso em determinada pasta? o nome do arquivo vai corretamente?

 

O INSERT esta dentro de um form e você não esta dando um NOTHING para fechar os objetos... de uma fechada neles pois é extremamente importante isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais ele não mostra nenhum erro?

 

Apresenta a mensagem de informação dizendo que o arquivo foi upado com sucesso em determinada pasta? o nome do arquivo vai corretamente?

 

O INSERT esta dentro de um form e você não esta dando um NOTHING para fechar os objetos... de uma fechada neles pois é extremamente importante isso.

 

Bom dia Patrique,

 

Então, ele não mostra erro, porque o sistema esta em Asp, jquery e flash, então unica coisa que ele mostra é Erro HTTP em cima da barra de progresso

 

quando o arquivo é pegueno, ele envia, grava no banco, se tiver arquivo igual ele renomeia, faz tudo certinho, masssssss se o arquivo for grandinho e demora pra enviar ele da esse erro e somente envia o arquivo sem gravar no banco

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque o Insert antes do File.SaveAs e faça o teste, veja o que acontece.

 

[]'s

 

Bom coloquei o INSERT antes do File.SaveAs, ele faz o upload do arquivo e grava no banco normal, mas com arquivo grande ele nem envia e nem salva o codigo seria

 

If Form.State = 0 Then
  Dim File, NomedoArquivo
  For Each File In Form.Files.Items
        If Len(File.FileName) > 0 Then
        NomedoArquivo = ArquivoNomeUnico(File.FileName, PastadeDestino)

        Set grava_db = Server.CreateObject("ADODB.RecordSet")
        msql = "INSERT INTO teste (arquivo) VALUES ('" & NomedoArquivo & "')"
        Set grava_db = Conn.Execute(msql)

        File.SaveAs PastadeDestino & "\" & NomedoArquivo
        Response.Write "<br>Arquivo salvo em <b>" & PastadeDestino & "</b> com o nome de <b>" & NomedoArquivo & "</b>"
        
      End If
  Next

ja com o codigo abaixo ele faz o upload e grava o arquivo pequeno no banco, e faz o upload do arquivo grande no server mas não grava no db :S

 

If Form.State = 0 Then
  Dim File, NomedoArquivo
  For Each File In Form.Files.Items
        If Len(File.FileName) > 0 Then
        NomedoArquivo = ArquivoNomeUnico(File.FileName, PastadeDestino)

        File.SaveAs PastadeDestino & "\" & NomedoArquivo
        Response.Write "<br>Arquivo salvo em <b>" & PastadeDestino & "</b> com o nome de <b>" & NomedoArquivo & "</b>"

        Set grava_db = Server.CreateObject("ADODB.RecordSet")
        msql = "INSERT INTO teste (arquivo) VALUES ('" & NomedoArquivo & "')"
        Set grava_db = Conn.Execute(msql)
        
      End If
  Next

Compartilhar este post


Link para o post
Compartilhar em outros sites

Remova a inclusao do arquivo de conexao do inicio da pagina... e apenas abra a conexao apos ele dar o Save no arquivo.. ou seja, apenas após ele realizar o upload..

 

Att;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver aqui galera, seguindo o que o Darkdemo disse, de remover a inlude, e fazer abertura da conexão apóso save, ao ao inves de eu usar a conexão com include, eu fiz ela dentro do asp mesmo

 

segue codigo abaixo utilizado para funcionar

 

If Form.State = 0 Then
  Dim File, NomedoArquivo
  For Each File In Form.Files.Items
        If Len(File.FileName) > 0 Then
        NomedoArquivo = ArquivoNomeUnico(File.FileName, PastadeDestino)
  
        File.SaveAs PastadeDestino & "\" & NomedoArquivo
        Response.Write "<br>Arquivo salvo em <b>" & PastadeDestino & "</b> com o nome de <b>" & NomedoArquivo & "</b>"
        
        Set Conn = Server.CreateObject("ADODB.Connection") 
        Conn.Open("DRIVER={MySQL ODBC 5.1 Driver};SERVER=XXXXXXXXX;PORT=XXXX;DATABASE=XXXXXX;USER=XXXXXX;PASSWORD=XXXXXX;OPTION=3;")

        Set grava_db = Server.CreateObject("ADODB.RecordSet")
        msql = "INSERT INTO teste (arquivo) VALUES ('" & NomedoArquivo & "')"
        Set grava_db = Conn.Execute(msql)
        
        End If
  Next

Pode classificar como RESOLVIDO, obrigado pela ajuda pessoal

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.