Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
/applications/core/interface/imageproxy/imageproxy.php?img=http://img194.imageshack.us/img194/3032/errou.jpg&key=4b8f51beb3ed4498e16b769171a5abd4e12c68390ee73496429b78bddd6fba3c" alt="Imagem Postada" />
durante o envio do upload, ele aparece esta mensagem diversas vezes, durante um determinado intervalo de tempo.
Se eu clicar em não, continuo o upload normalmente...
alguem sabe como posso fazer para isto não acontecer?
É provavelmente que um loop deve ta ficando infinito nesse script causando assim esse erro...
100% de chance de ser isso.
Procure por um for... ou while infinito...
Abraços
a unica coisa que pode estar infinita é o objUpload.onProgress
do contrário não tem outro looping com este problema, dê uma olhada no código:
//importando as classes necessárias.
import flash.net.FileReference;
import flash.events.*;
import flash.external.*;
//definindo variáveis
var dataID:Date = new Date();
var uniqueID:String = substring(Math.random(), 0, 10);
var maxfilesizebytes:Number = _root.maxfilesizebytes;
var extensoes:String = _root.extensoes;var corfonte:Number = parseInt("0x"+_root.corfonte.split("#").join(""), 16);
var corfonteprogress:Number = parseInt("0x"+_root.corfonteprogress.split("#").join(""), 16);
var corborda:Number = parseInt("0x"+_root.corborda.split("#").join(""), 16);
var corfundotexto:Number = parseInt("0x"+_root.corfundotexto.split("#").join(""), 16);
var corprogresso:Number = parseInt("0x"+_root.corprogresso.split("#").join(""), 16);
var functioncall:String = _root.functioncall;
var propriedades:Array = new Array();
var data1:Date;
var data2:Date;
data2 = new Date();
var bytesanterior:Number = 0;
var filesize:Number;
var btBrowse:MovieClip;
var tFile:TextField;
var mcProgressBar:MovieClip;
var bordaProgress:MovieClip;
var bordabotao:MovieClip;
var fundobotao:MovieClip;
var textobotao:MovieClip;
//instancia o objeto listener
var objUpload:Object = new Object();
//define as extensões permitidas
var arquivosPermitidos:Array = new Array();
//separa os tipos de extensoes
var arrExtensoes:Array = extensoes.split("|");
for(i=0; i<arrExtensoes.length; i++){
//separa a legenda da extensão
var arrExtensoes2:Array = arrExtensoes[i].split("/");
arquivosPermitidos[i] = {description:arrExtensoes2[0], extension:arrExtensoes2[1]};
}
//define a cor da borda da caixa de texto
tFile.borderColor = corborda;
tFile.textColor = corfonte;
tPorcentagem.textColor = corfonteprogress;
//muda a cor da borda da barra de progresso
myColor1 = new Color(bordaProgress);
myColor1.setRGB(corborda);
//muda a cor da barra de progresso
myColor2 = new Color(mcProgressBar);
myColor2.setRGB(corprogresso);
//muda a cor da borda do botao
myColor3 = new Color(btBrowse.bordabotao);
myColor3.setRGB(corborda);
//muda a cor de fundo do botao
myColor4 = new Color(btBrowse.fundobotao);
myColor4.setRGB(corfundotexto);
//muda a cor do texto do botao
myColor5 = new Color(btBrowse.textobotao);
myColor5.setRGB(corfonte);
//muda a cor do fundo do tFile
tFile.backgroundColor = corfundotexto;
//criando a instancia da classe FileReference, a classe responsável pelo Upload...
var frUpload:FileReference = new FileReference();
//função principal
function initUpload(Void):Void
{
//não mostra a borda da barra de progresso
bordaProgress._visible = false;
//tamanho inicial da barra de progresso
mcProgressBar._width = 0;
//ação de escolha de um arquivo na caixa de browse...
objUpload.onSelect = function(f:FileReference):Void
{
//coloca os dados do arquivo em um array
for(var propriedade in f)
propriedades.push(propriedade+"="+f[propriedade]);
//seta campo texto com o nome do arquivo selecionado
tFile.text = f.name;
//seta o tamanho do arquivo na variavel global
filesize = f.size;
//chega o limite de upload
if(filesize >= maxfilesizebytes){
getURL("java script:alert('O arquivo selecionado tem tamanho maior que o permitido! ("+convertSize(filesize)+" > "+convertSize(maxfilesizebytes)+")');");
}
else{
//mostra mensagem de enviando arquivo
tPorcentagem.text = "Enviando arquivo...";
//mostra borda da barra de progresso
bordaProgress._visible = true;
//método para enviar o arquivo em multipart ao servidor...
frUpload.upload(urlpost, "userfile");
}
}
//durante o progresso do envio
objUpload.onProgress = function(file:FileReference, bytesLoaded:Number, bytesTotal:Number):Void
{
//cria a data atual
data1 = new Date();
//obtém os segundos e mili da data 1
seconds1 = data1.getSeconds();
mili1 = data1.getMilliseconds();
//obtém os segundos e mili da data 2
seconds2 = data2.getSeconds();
mili2 = data2.getMilliseconds();
//diferença de tempo entre os dois tempos de chamada
seconds = Math.abs((seconds2+mili2/1000)-(seconds1+mili1/1000));
//porcentagem de envio
percent = convertpontovirgula(casasdecimais(bytesLoaded*100/bytesTotal, 2));
//coloca porcentagem no texto da barra de progresso
tPorcentagem.text = percent +'% - '+ convertSize(bytesLoaded) + " de " + convertSize(bytesTotal)+" - "+convertSize((bytesLoaded-bytesanterior)/seconds)+"/s";
//aumenta a barra de progresso
mcProgressBar._width = Math.ceil(325*(bytesLoaded/bytesTotal));
//seta os bytes carregados anteriormente
bytesanterior = bytesLoaded;
//seta a data para ser resgatada na proxima execução
data2 = new Date();
}
//quando o arquivo for enviado totalmente ao servidor e estar Completo, retornará neste Método...
objUpload.onComplete = function(f:FileReference):Void {
//inclui este texto na barra de progresso
tPorcentagem.text = "Arquivo enviado com sucesso! "+convertSize(filesize);
//chama o ajax na pagina responsável pela continuação do processo
ExternalInterface.call(functioncall, uniqueID, propriedades.toString());
}
//caso aprensente algum erro no envio...
objUpload.onHTTPError = objUpload.onIOError = function() {
//mostra mensagem de erro
tPorcentagem.text = "Erro ao enviar arquivo!";
}
//adicionando as ações de listener ao objeto de Upload...
frUpload.addListener(objUpload);
//ao clicar no botão abrir a caixa de seleção
btBrowse.onRelease = function(Void):Void
{
//método para abrir a caixa de seleção na classe FileReference...
frUpload.browse(arquivosPermitidos);
}
}
//separa as casas decimais
function casasdecimais(numerotratado, casas) {
numerotratado = Math.round(numerotratado * Math.pow(10, casas)) / Math.pow(10, casas);
numerodeajuste = numerotratado.toString();
var ajustedecimais:Array = numerodeajuste.split(".");
if (ajustedecimais[1] == null and casas > 0) {
ajustedecimais[1] = "0";
} else if (casas <= 0){
return(ajustedecimais[0]);
break;
}
saida = ajustedecimais[1];
while(length(saida) < casas) {
saida = saida + "0";
}
saida = ajustedecimais[0] + "." + saida;
return(saida);
}
//converte o ponto em virgula
function convertpontovirgula(variavalpconverter) {
variavalpconverter.toString();
var ajustevirg:Array = variavalpconverter.split(".");
if (ajustevirg.length == 2) {
variavalpconverter = ajustevirg[0] + "," + ajustevirg[1];
}
return variavalpconverter;
}
//formata na unidade correta
function convertSize(numberBytes:Number):String{
if(numberBytes < 1024) return numberBytes+" Bytes";
if(numberBytes >= 1024 && numberBytes < 1048576) return convertpontovirgula(casasdecimais(numberBytes/1024, 2))+" Kb";
if(numberBytes >= 1048576 && numberBytes < 1073741824) return convertpontovirgula(casasdecimais(numberBytes/1024/1024, 2))+" Mb";
if(numberBytes >= 1073741824 && numberBytes < 1099511627776) return convertpontovirgula(casasdecimais(numberBytes/1024/1024/1024, 2))+" Gb";
}
//iniciando nosso projeto...
initUpload();
Fiiiiii que conta mais doida é essa aqui????????
percent = convertpontovirgula(casasdecimais(bytesLoaded*100/bytesTotal, 2)); ????????
Isso ai ta funcionando corretamente???? pelas minhas contas ta não
Porcentagem se faz assim:
percent = Math.round(bytesLoaded/bytesTotal)*100);
Desculpe-me se estiver enganado... mas pra que tanta conta maluca se isso ai é tão mais simples?
Assim você não tem que converter tamanho algum nem nada...
Abraços
hehehe
tá funcionando corretamente....
Pode testar no link que postei acima!
essa variável é so pra exibição, o que mexe na barra de upload é essa:
mcProgressBar._width = Math.ceil(325*(bytesLoaded/bytesTotal));
aqui:
percent = convertpontovirgula(casasdecimais(bytesLoaded100/bytesTotal, 2));"bytesLoaded100/bytesTotal" é a mesma coisa de "bytesLoaded/bytesTotal)*100"
as funcoes "casasdecimais" e "convertpontovirgula" fazem o que o proprio nome diz! Retorno a dizer, esta parte do código é so para exibição!!!
no mais ainda não consegui resolver meu problema, e creio que a conta em cima não tem nada a ver com o mesmo. Alguém pode me ajudar?
Vou postar a solução para o problema se alguem precisar:
trata-se de um bug pro flash quando se envia um arquivo grande, então temos que dar um trabalho pro flash pensar que não tá parado, demorando pra responder ou loop infinito.
junto com a chamada do method upload da classe filereference chame a função startSomeNonsense() (abaixo) como no exemplo abaixo:
.
.
.
frUpload.upload(urlpost, "userfile");
//chama função para dar um trabalho extra ao flash não emitir um erro
//dizendo que o script está deixando o computador lento
startSomeNonsense();
a função:
function startSomeNonsense(){
var count:Number = 0;
this.onEnterFrame = function(){
count += 1;
}
}
* enviei um arquivo de 360 mb sem problemas. FLws!
você pode ver o script funcionando aqui:
http://www.gwar.com.br/beta/index.php?act=...er&action=1
user: teste
senha: teste
* envie um arquivo entre 100mb e 400mb para melhor vizualização