Ir para conteúdo

POWERED BY:

Arquivado

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

LuX_

Problema com Upload de arquivos grandes em asp

Recommended Posts

Olá pessoal.

Estou fazendo um sistema básico em asp e me deparei com algumas dificuldades.

Muitas eu já consegui solucionar, mas essa realmente me intriga, já procurei ajuda na net e muita coisa que as pessoas falam não são verdade, o que piora ainda mais a minha busca e me confunde.

 

Construí uma página em que você escolhe o produto de uma tabela (pego do banco) e cadastra uma foto para ele.

 

Usei um sistema de downloads que não exige complementos que é feito a partir do FSO.

 

Funcionou e eu até consigo efetuar o cadastro do endereço da foto no banco de dados.

Porém ao colocar um arquivo com tamanho próximo de 1 mega (ou mais) o navegador fica carregando muito tempo e não responde.

Antes ele dava timeout no script, mas eu alterei e isso não acontece, porém o tempo que o arquivo leva para ser transferido deve ser enorme.

 

Dado esse problema vim aqui pedir alguma explicação ou sugestão do que eu possa fazer para tornar isso leve o suficiente para transferir imagens maiores em um tempo razoável.

 

p.s: Esse tempo todo demora testando o sistema na máquina. Imagine se fosse na internet então..

 

Obrigado.

'Controle de cache graças ao I.E ¬¬
'HTTP/1.1
Response.CacheControl = "no-cache"
Response.AddHeader "cache-control","no-cache"
'HTTP/1.0
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1 ' minutos até a expiração
Response.Expiresabsolute = Now() ' data de expiração
Server.ScriptTimeout = 100000
dim codigo
		codigo = cint(Request.QueryString("pid"))
	if isempty(codigo) or codigo = 0 then
		Response.redirect "img.asp?q=nocod"
		response.end
	end if
Dim Contador, Tamanho,banco
Dim ConteudoBinario, ConteudoTexto
Dim Delimitador, Posicao1, Posicao2
Dim ArquivoNome, ArquivoConteudo, PastaDestino,pasta_caminho
Dim objFSO, objArquivo

PastaDestino = Server.MapPath("./up")
'Response.write PastaDestino
'Determina o tamanho do conteúdo
Tamanho = Request.TotalBytes

'Obtém o conteúdo no formato binário
ConteudoBinario = Request.BinaryRead(Tamanho)
'Transforma o conteúdo binário em string
For Contador = 1 To Tamanho
  ConteudoTexto = ConteudoTexto & Chr(AscB(MidB(ConteudoBinario, Contador, 1)))
Next 
response.write ConteudoTexto
response.write "<br><br><br><br><br><br><br>"
'Determina o delimitador de campos
Delimitador = Left(ConteudoTexto, InStr(ConteudoTexto, vbCrLf) - 1)
Response.write Delimitador
'Percorre a String procurando os campos
'identifica os arquivo e grava no disco
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")

Posicao1 = InStr(ConteudoTexto, Delimitador) + Len(Delimitar)
response.write Posicao1
response.write "<br><br><br><br><br><br><br>"
response.write "<br><br><br><br><br><br><br>"
do while True
  ArquivoNome = ""
  Posicao1 = InStr(Posicao1, ConteudoTexto, "filename=")
  if Posicao1 = 0 then
	exit do
  else
   'Determina o nome do arquivo
   Posicao1 = Posicao1 + 10
   Posicao2 = InStr(Posicao1, ConteudoTexto, """")
   For contador = (Posicao2 - 1) to Posicao1 step -1
	if Mid(ConteudoTexto, Contador, 1) <> "\" then '"
	  ArquivoNome = Mid(ConteudoTexto, Contador, 1) & ArquivoNome
	else
	  exit for
	end if
   next
   'Determina o conteúdo do arquivo
   Posicao1 = InStr(Posicao1, ConteudoTexto, vbCrLf & vbCrLf) + 4
   Posicao2 = InStr(Posicao1, ConteudoTexto, Delimitador) - 2
   ArquivoConteudo = Mid(ConteudoTexto, Posicao1, (Posicao2 - Posicao1 + 1))
   'Grava o arquivo
   if ArquivoNome <> "" then
	 Set objArquivo = objFSO.CreateTextFile(PastaDestino & "\" & ArquivoNome, true)
	 objArquivo.WriteLine ArquivoConteudo
	 objArquivo.Close
			pasta_caminho =   replace(mid(PastaDestino & "\" & ArquivoNome,instr(PastaDestino & "\" & ArquivoNome,"up\"),len(PastaDestino & "\" & ArquivoNome)),"\","/")
			'tradução do comando acima LER TUDO: pasta_destino = numero onde começa a string "up\" nas Strings PastaDestino & "/" & ArquivoNome; pasta_destino = mid(PastaDestino & ArquivoNome,numero encontrado no processo anterior, fim da string PastaDestino &"/"& ArquivoNome; pastadestino = replace (pedaço extraido no outro procedimento,"\","/")
			
			'pasta_caminho = mid(PastaDestino & "\" & ArquivoNome,pasta_caminho ,len(PastaDestino & "\" & ArquivoNome))
			'pasta_caminho = replace(pasta_caminho,"\","/")
			
	 Response.write "Arquivo " & pasta_caminho & " gravado com sucesso!<br>"
	 Set objArquivo = nothing
   end if
end if
Loop
Set objFSO = nothing
banco = Server.MapPath("./produtos.mdb")
sql = "update tabprodutos set foto='" & pasta_caminho & "' where codigo=" & codigo
response.write sql
	set cn = Server.CreateObject("ADODB.Connection")
	cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & banco & ";"
	cn.execute sql
	set cn = nothing
	response.redirect "img.asp"

Compartilhar este post


Link para o post
Compartilhar em outros sites

O servidor o qual voce vai hospedar o site não oferece nenhum componente de Upload?

Ele oferece sim, o FileUp.

 

Mas eu tava querendo fazer sem usar nenhum componente avulso...não tem como?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, se esta utilizando FSO pra upar arquivo de 1M, você tera que ver no servidor se ele disponibiliza upload sem componente pra este tamanho...pq em alguns servidores limitam o upload FSO.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, se esta utilizando FSO pra upar arquivo de 1M, você tera que ver no servidor se ele disponibiliza upload sem componente pra este tamanho...pq em alguns servidores limitam o upload FSO.

Mas então, isso acontece na máquina local.

E não no servidor entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Era o que eu tava fazendo. ¬¬

 

Mas não achei e venho pedir ajuda.

 

E isso também acontece online.

Compartilhar este post


Link para o post
Compartilhar em outros sites

testou algum outro script de upload sem componentes?

 

Eu estava precisando de um para uns projeto aqui e o que melhor se adaptou para o que eu precisava foi o do laboratorio de scripts do forum, os outros que testei ficavam em loop infinito ou expiravam o tempo limite do iis

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.