Ir ao conteúdo
  • Cadastre-se

Air-Gear

Membro Pleno
  • Posts

    311
  • Cadastrado em

  • Última visita

Tudo que Air-Gear postou

  1. Obrigado pela ajuda! Foi erro do site, agora funcionou!
  2. Olá pessoal! Eu estou tentando resolver um código de um desafio, mas não consigo achar o erro que impede de imprimir a saída. Aponta que minha implementação encerrou com um retorno inválido. Segue a Descrição Agora, vamos combinar vários conceitos de lógica de programação, como manipulação de strings, operações matemáticas, controle de fluxo e expressões regulares, aplicados para o desenvolvimento de uma solução de correção para a equipe de administração de uma empresa bancária. Eles precisam de uma solução para a validação de números de contas com base em regras específicas. O programa solicitará ao usuário que insira um número de conta e verificará se ele atende aos critérios predefinidos de validação. Além disso, você pode adicionar a capacidade de informar ao usuário qual regra específica não foi cumprida caso a validação falhe. Regras de Validação: O número de conta deve ter exatamente 6 dígitos. O primeiro dígito deve ser maior que zero, ou seja, estar no intervalo de 1 a 9. A soma dos dígitos do número de conta não deve ser maior do que 30. Entrada O programa deve solicitar as seguintes informações: Número de conta (uma sequência de 6 dígitos). Saída O programa deverá fornecer uma mensagem que informa se o número de conta é válido ou inválido, indicando se o número de conta atende às regras de validação. Caso o número de conta seja inválido, o programa deve informar qual regra específica não foi cumprida. Exemplos A tabela abaixo apresenta exemplos com alguns dados de entrada e suas respectivas saídas esperadas. Certifique-se de testar seu programa com esses exemplos e com outros casos possíveis. Entrada: 634100 Saída: Numero de conta valido. Entrada: 023699 Saída: Numero de conta invalido: O primeiro digito deve ser maior que zero. Entrada: 989899 Saída: Numero de conta invalido: A soma dos dígitos e maior que 30. O código feito por mim: //Desafios JavaScript na DIO têm funções "gets" e "print" acessíveis globalmente: //- "gets" : lê UMA linha com dado(s) de entrada (inputs) do usuário; //- "print": imprime um texto de saída (output), pulando linha. //Saiba mais sobre Expressões Regulares: //https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Guide/Regular_expressions // O gets() receberá um número de conta como entrada: const numeroConta = gets(); // Verifica se o número de conta consiste em exatamente 6 dígitos usando uma expressão regular: if (/^\d{6}$/.test(numeroConta)) { const numArray = numeroConta.split('').map(Number); // Calcula a soma dos dígitos no número de conta const sum = numArray.reduce((a, b) => a + b, 0); // Verifica se o primeiro dígito é maior que zero e a soma dos dígitos é menor ou igual a 30 if (numArray[0] > 0 && sum <= 30) { // Se a condição acima for verdadeira, imprime a mensagem de número de conta válido: print('Numero de conta valido.'); } else { // Verifica se o numArray[0] referente ao primeiro dígito é igual a zero : if (numArray[0] === 0) { // Se o primeiro dígito for igual a zero, imprime a mensagem de número de conta inválido por causa do primeiro dígito: print('Numero de conta invalido: O primeiro digito deve ser maior que zero.'); } else { // Caso contrário, imprime a mensagem de número de conta inválido devido à soma dos dígitos ser maior que 30: print('Numero de conta invalido: A soma dos digitos e maior que 30.'); } } } else { // Se o número de conta não tiver exatamente 6 dígitos, imprime uma mensagem de erro: print('Numero de conta invalido: Deve conter exatamente 6 digitos.'); } Alguém sabe onde estou errando?
  3. Olá pessoal! Eu estou vendo videoaulas sobre Spring Boot e no projeto utiliza o Swagger para a interface, porém a versão do Swagger que está no site para colocar manualmente não aceita versões do Spring acima do 3.0. Eu tentei gerar com uma versão mais próxima que o professor utilizava e não conseguir colocar nem do site e nem a versão do curso, dava erro de vulnerabilidade. Eu percebi que os vídeos foram gravados dois anos atrás e com isso muita coisa mudou. Eu queria saber se tem alguma versão mais nova do Swagger ou algum substituto dele para colocar no meu projeto?
  4. Eu fiz isso e cheguei até as Variáveis de Ambiente e adicionei o C:\wamp64\bin\php\php5.6.40\php.exe Não funcionou, ainda fica laranja.
  5. Olá pessoal! Eu desinstalei o WampServer antigo para instalar a versão 3.2.6 para usar o PHP 8. Quando iniciei, ele não fica verde e apresenta essa mensagem: Warning: There is Wampserver path (c:/wamp64) into Windows PATH environnement variable: (C:\wamp64\bin\php\php5.6.40) Warning: It seems that a PHP installation is declared in the environment variable PATH C:\wamp64\bin\php\php5.6.40 Wampserver does not use, modify or require the PATH environment variable. Using a PATH on Wampserver or PHP version may be detrimental to the proper functioning of Wampserver. Alguém pode me ajudar?
  6. Eu conseguir evoluir com o o código, os dados já são enviados para o banco de dados. Agora só falta retornar todos os dados de cada posição ao invés do ultimo. Segue o novo código: public class clUpload { #region insert internal static tbUploadSCP novoUpload(objUpload obj) { tbUploadSCP uploadA = new tbUploadSCP(); using (TransactionScope ts = new TransactionScope()) { using (Repository<tbUploadSCP> repSol = new Repositoryupload()) { for (int i = 0; i < obj.arq.Count; i++) { uploadA = new tbUploadSCP { url = obj.arq[i].url, userId = obj.arq[i].userId, upIdAcao = obj.arq[i].upIdAcao, upTipo = obj.arq[i].upTipo, upData = obj.arq[i].upData, }; repSol.Add(uploadA); } } ts.Complete(); return uploadA; } } }
  7. Bom, como não fiquei parado, eu continuei tentando e acabei que optando o for no lugar do foreach. Segue o novo código: public class clUpload { #region insert internal static bool novoUpload(tbUploadSCP obj) { tbUploadSCP uploadA = new tbUploadSCP(); using (TransactionScope ts = new TransactionScope()) { using (Repository<tbUploadSCP> repSol = new Repositoryupload()) { string[] end = { }; for (int i = 0; i < obj.url.Length; i++) { end[i] = obj.url[i].ToString(); obj.url = end[i]; } uploadA = new tbUploadSCP { url = obj.url, userId = obj.userId, upIdAcao = obj.upIdAcao, upTipo = obj.upTipo, upData = obj.upData, }; repSol.Add(uploadA); //var upMetaPeriodo = UpMetaPeriodo(obj); } ts.Complete(); return true; } } //Resto do código que não tem haver com o problema } Visual Studio não deu erro no código, mas não executou como devia. Eu tentei colocar "url = end;", mas apontou erro. Eu estou mais ou menos no caminho.
  8. Olá pessoal! Entregaram um código já montando e preciso fazer uma modificação na parte do campo url, já que ele é uma array de string com tamanho variado. Antes de mexer no código, já funcionava, mas o campo url pegava só a primeira posição. No Front-End que utiliza Javascript eu conseguir resolver, o Back-End que utiliza C# estou pegando agora. Eu preciso implementar um foreach no campo, mas o campo está dentro de uma concatenação. Eu até tentei colocar o Foreach dentro, mas o Visual Studio aponta erro. Então coloquei antes para depois jogar dentro, mas estou agarrando e não estou achando um tutorial especifico para esse foreach. Alguém pode me ajudar? Segue o código. public class clUpload { #region insert internal static bool novoUpload(tbUploadSCP obj) { tbUploadSCP uploadA = new tbUploadSCP(); using (TransactionScope ts = new TransactionScope()) { using (Repository<tbUploadSCP> repSol = new Repositoryupload()) { string[] end = obj.url.Length; foreach (var i in end) { obj.url[i] = end[i]; } uploadA = new tbUploadSCP { url = obj.url, userId = obj.userId, upIdAcao = obj.upIdAcao, upTipo = obj.upTipo, upData = obj.upData, }; repSol.Add(uploadA); //var upMetaPeriodo = UpMetaPeriodo(obj); } ts.Complete(); return true; } } //Resto do código que não tem haver co o problema }
  9. Valeu @GabrielSennaMs! Enquanto isso eu trabalhei no novoUpload e finalmente conseguir imprimir o novo nome do arquivo que esta na primeira posição. Agora eu estou trabalhando numa array para imprimir todos os nomes, mas imprime só o primeiro nome. Segue o código. echo<<<EOF <p></p> <p>Nome: {$sFileName}</p> <p>Tamanho: {$sFileSize}</p> <input class="arrayFoto" id="impu" type="text" ng-model="sp.nomeFoto[{$i}]" name="nomeFoto[{$i}]" disabled value={$nome_final}> <p></br></p> EOF; function novoUpload(impu) { data = new Date(); debugger dia = String(data.getDate()).padStart(2, '0'); mes = String(data.getMonth() + 1).padStart(2, '0'); ano = data.getFullYear(); dataAtual = dia + '/' + mes + '/' + ano; debugger var lista = document.getElementsByClassName("arrayFoto"); for (i=0; i < lista.length; i++){ end = "app/upload/"+document.getElementById("impu").value; document.getElementById("demo").innerHTML = end; //Essa linha é usado pra impressão de teste //ext = path.split('.').pop(); } debugger id = $rootScope.usuario.id; url = arq.end; userId = arq.id; upIdAcao = arq.nome; upTipo = 1; upData = arq.dataAtual; //upArray = arq. return arq; }
  10. Tem algum material que faz upload de foto em Angular ou algum framework em Javascript que você recomenda?
  11. @GabrielSennaMs Bom, eu tentei fazer o esquema de salvar fotos sem depender de PHP, mas não conseguir. Só para ter uma ideia do caminho, no HTML com Angular tem um campo input para escolher as fotos. Em seguida, clicando no botão vai ativar uma função Javascript que verifica se os arquivos são validos e vai chamar upload.php com ID do usuário. Dentro do PHP, vai analisar os arquivos e fazer o esquema de renomear-los para jogar de volta no HTML. Sim, essa lista vai ser carregada no Front-End. Vai exibir a mensagem que o arquivo foi salvo e vai jogar input invisível com o novo nome década arquivo de foto. E também quero jogar esses novos nomes dentro de uma função Javascript.
  12. Olá pessoal! O sistema já tem um código que salva todos os campos no Banco Dados, eu simplesmente preciso implementar o upload de fotos. Bom, eu já conseguir fazer upload das fotos com os novos nomes deles em código PHP, mas precisei jogar de volta na página para salvar os dados das fotos junto com outros dados de cadastro. Na parte de jogar de volta eu fiz assim. //Código do Upload acima echo<<<EOF <p></p> <p>Nome: {$sFileName}</p> <p>Tamanho: {$sFileSize}</p> <input id="impu" type="hidden" ng-model="sp.nomeFoto[{$i}]" name="nomeFoto[{$i}]" disabled value={$nome_final}> <p></br></p> EOF; //Resto do código e fechamento do PHP Neste código, eu jogo todo o novo nome das fotos dentro deum input invisível. Após jogar de volta na página eu mando salvar junto com outros dados. O novoNome é um array, pois salvo várias fotos. O problema que na inspeção do código, não envia o novo e outros dados das fotos. O código para adicionar os dados são esses. function addItem() { if (validaAddItem()) { var objadd = { //Somente o nomeFoto para exemplificar melhor o código. "nomeFoto": $(novoUpload(impu)).value } debugger loadingItensAdicionados = true; $timeout(function () { arrayItensAdicionados.push(objadd); limparItem(); loadingItensAdicionados = false; }, 200); } } function montarSalvar() { debugger var params = { //Parte do código fica aqui no lugar do comentário. }; arrayItensAdicionados.forEach(element => { params.itens.push( { //Parte do código fica aqui no lugar do comentário. "sciNomeFoto": element.nomeFoto } ); }); return params; } E foi necessário criar uma nova função, novoUpload. Segue o código. function novoUpload(impu) { data = new Date(); debugger dia = String(data.getDate()).padStart(2, '0'); mes = String(data.getMonth() + 1).padStart(2, '0'); ano = data.getFullYear(); debugger end = "app/upload/"+impu.HTMLCollection.nomeFoto[0].namedItem(defaultValue); ext = path.split('.').pop(); dataAtual = dia + '/' + mes + '/' + ano; debugger id = $rootScope.usuario.id; url = arq.end; userId = arq.id; upIdAcao = arq.nome; upTipo = 1; upData = arq.dataAtual; //upArray = arq. return arq; } Inspecionei o código e foi necessário implementar o HTMLCollection5, mas nunca usei e não sei se é assim, pois não mostrou o erro no Console da Inspeção do Código. Onde estou errando?
  13. Bom no final eu conseguir fazer e utilizei o EOF pra achar os erros e ter noção do que o código faz, além de claro conseguir salvar varias imagens de formatos diferentes mais PDF ao mesmo tempo. No código renomeia todos os arquivos mantendo o formato PDF e colocando todas as imagens em JPG. Código pronto e concluído. <?php function bytesToSize1024($bytes, $precision = 2) { $unit = array('B','KB','MB'); return @round($bytes / pow(1024, ($i = floor(log($bytes, 1024)))), $precision).' '.$unit[$i]; } //Pega o id do usuário logado $id_url = $_GET['id']; // Numero de campos de upload $numeroCampos = count($_FILES['image_file']['name']); // Tamanho máximo do arquivo (em bytes) $tamanhoMaximo = 1024*1024*2; // Extensões aceitas $extensoes = array(".jpg", "jpeg", ".gif", ".png", ".pdf", ".bmp", ".pdf", ".tiff"); //Local da pasta $_UP['pasta'] = '../upload/'; $substituir = false; for ($i = 0; $i < $numeroCampos; $i++) { // Informações do arquivo enviado $sFileName = $_FILES['image_file']['name'][$i]; $sSize = $_FILES['image_file']['size'][$i]; $sFileSize = bytesToSize1024($sSize, 1); $nomeTemporario = $_FILES['image_file']['tmp_name'][$i]; // Verifica se o arquivo foi colocado no campo if (!empty($sFileName)) { $erro = false; // Verifica se o tamanho do arquivo é maior que o permitido if ($sSize > $tamanhoMaximo) { $erro = "O arquivo " . $sFileName . " não deve ultrapassar " . $tamanhoMaximo. " bytes"; } // Verifica se a extensão está entre as aceitas elseif (!in_array(strrchr($sFileName, "."), $extensoes)) { $erro = "A extensão do arquivo <b>" . $sFileName . "</b> não é válida"; } // Verifica se o arquivo existe e se é para substituir elseif (file_exists($_UP['pasta'] . $sFileName) and !$substituir) { $erro = "O arquivo <b>" . $sFileName . "</b> já existe"; } else{ //Pega a extensão do arquivo $TipoExtensao = pathinfo($sFileName, PATHINFO_EXTENSION); // O arquivo passou em todas as verificações, hora de tentar movê-lo para a pasta // Primeiro verifica se deve trocar o nome do arquivo $unixTime = time(); $timeZone = new \DateTimeZone('America/Sao_Paulo'); $time = new \DateTime(); $time->setTimestamp($unixTime)->setTimezone($timeZone); $formattedTime = $time->format('d-m-Y_l_h-i-s-a'); $aleatorio = rand(); if($TipoExtensao == 'pdf'){ $nome_final = $id_url .'_'. $formattedTime .'_'. $aleatorio .'.pdf'; }else{ $nome_final = $id_url .'_'. $formattedTime .'_'. $aleatorio .'.jpg'; } // Depois verifica se é possível mover o arquivo para a pasta escolhida if (move_uploaded_file($nomeTemporario, $_UP['pasta'] . $nome_final)) { // Upload efetuado com sucesso, exibe uma mensagem e um link para o arquivo echo "Upload do arquivo ".$sFileName." foi efetuado com sucesso!"; } else { // Não foi possível fazer o upload, provavelmente a pasta está incorreta echo "Não foi possível enviar o arquivo, tente novamente"; } } echo <<<EOF <p></p> <p>Nome: {$sFileName} Tamanho: {$sFileSize}</p> <p>{$erro}</p> <p></br></p> <p>Posição: {$i}</p> <p>Algum erro?: {$erro}</p> <p>Nome Inicial: {$sFileName}</p> <p>Nome Temporário: {$nomeTemporario}</p> <p>Nome Final: {$nome_final}</p> <p>Tamanho: {$sFileSize}</p> <p></br></p> EOF; }else{ echo "Selecione algum arquivo de imagem ou PDF para fazero upload."; } } echo <<<EOF <p></p> <p>Número de arquivos adicionados no upload: {$numeroCampos}</p> EOF;
  14. Bom, eu não fiquei parado e acabei utilizando PHP para fazer isso porque não achei outra solução melhor. Segue o código: upload.php <?php $id_url = $_GET['id']; function bytesToSize1024($bytes, $precision = 2) { $unit = array('B','KB','MB'); return @round($bytes / pow(1024, ($i = floor(log($bytes, 1024)))), $precision).' '.$unit[$i]; } $sFileName = $_FILES['image_file']['name']; $sFileType = $_FILES['image_file']['type']; $sFileSize = bytesToSize1024($_FILES['image_file']['size'], 1); $TipoExtensao = pathinfo($sFileName, PATHINFO_EXTENSION); //Local da pasta $_UP['pasta'] = '../upload/'; if ($_FILES['image_file']['error'] != 0) { die("Não foi possível fazer o upload, erro:" . $_UP['erros'][$_FILES['image_file']['error']]); exit; // Para a execução do script } // O arquivo passou em todas as verificações, hora de tentar movê-lo para a pasta // Primeiro verifica se deve trocar o nome do arquivo $unixTime = time(); $timeZone = new \DateTimeZone('America/Sao_Paulo'); $time = new \DateTime(); $time->setTimestamp($unixTime)->setTimezone($timeZone); $formattedTime = $time->format('d-m-Y_l_h-i-s-a'); $aleatorio = rand(); if($TipoExtensao == 'pdf'){ $nome_final = $id_url .'_'. $formattedTime .'_'. $aleatorio .'.pdf'; }else{ $nome_final = $id_url .'_'. $formattedTime .'_'. $aleatorio .'.jpg'; } // Depois verifica se é possível mover o arquivo para a pasta escolhida if (move_uploaded_file($_FILES['image_file']['tmp_name'], $_UP['pasta'] . $nome_final)) { // Upload efetuado com sucesso, exibe uma mensagem e um link para o arquivo echo "Upload efetuado com sucesso!"; } else { // Não foi possível fazer o upload, provavelmente a pasta está incorreta echo "Não foi possível enviar o arquivo, tente novamente"; } //Fim do novo código echo <<<EOF <p></p> <p>Tipo: {$sFileType}</p> <p>Tamanho: {$sFileSize}</p> EOF; O $id_url = $_GET['id']; do upload.php pega o id do usuário no qual é lido no oXHR.open('POST', 'app/views/upload.php?id='+buscarID); que está no arquivo upload-foto.js. O id vai ser utilizado pra renomear o arquivo. O $_UP['pasta'] = '../upload/'; especifica o local onde a imagem vai ser salva. Acrescentei salvar PDF também e vai ser salvo como PDF enquanto todas as imagens vão ser salvas como JPG. O $TipoExtensao = pathinfo($sFileName, PATHINFO_EXTENSION); pega o tipo de extensão do arquivo e é utilizado no if($TipoExtensao == 'pdf'){ No mais, resolvido a questão do upload da foto e salvar na pasta upload. Agora eu preciso que salve não uma, mas varias fotos e PDFs de uma vez.
  15. Bom, como disse anteriormente, não fiquei parado, mas estou atrasado pra mostrar a solução que achei. function tableToPDF() { var pegar_dados = document.getElementById('testTable').innerHTML; var janela = window.open('','',width=800,height=800); janela.document.write('<html><head>'); janela.document.write('<title>PDF</title>'); janela.document.write('<link rel="stylesheet" href="vendor/pivottable/dist/pivot.css">'); janela.document.write('<link rel="stylesheet" href="app/css/app.css">'); janela.document.write('<link rel="stylesheet" href="app/css/style.css">'); janela.document.write('</head>'); janela.document.write('<body>'); janela.document.write('<input type="button" onclick="window.print()"value="Salva PDF">'); janela.document.write('<table class="pvtTable">'); janela.document.write(pegar_dados); janela.document.write('<thead>'); janela.document.write('<tr>'); janela.document.write('<th>'); janela.document.write('</th>'); janela.document.write('</tr>'); janela.document.write('</thead>'); janela.document.write('</table>'); janela.document.write('</body></html>'); janela.document.close(); } Como o html2canvas estava criando uma imagem pra depois criar um PDF e estava cortando quase toda a planilha, eu desistir dele e fiz um esquema de optar pra imprimir em PDF. Como abrir no automático não mostrava a planilha com as linhas divisórias, eu optei pra abrir uma nova janela primeiro com a formatação necessárias com um botão Salvar que vai exibira opção de imprimir e o usuário vai escolher a opção Imprimir em PDF pra pra criar o PDF com a planilha com divisórias. É isso! Problema resolvido!
  16. Olá! Eu estou trabalhando um código que faz um upload de uma foto e salva numa pasta na hospedagem. Eu fiz o esquema de escolher somente fotos e mostrar o nome e os dados do arquivo e ate aí tudo bem, mas eu não conseguir salvar na pasta "upload". Inspecionei o código e não apontou um erro exato. Seguem o código: solicitacao-compras.html <div class="row"> <div class="col-sm-12 col-md-2"> <div class="upload_form_cont"> <label>Foto</label> <img id="preview" /> </div> </div> <div class="col-sm-12 col-md-6 "> <div class="upload_form_cont"> <form id="upload_form" enctype="multipart/form-data" method="post" action="/profile-upload"> <div> <div><label for="image_file">Selecione o arquivo de imagem</label></div> <div><input type="file" name="image_file" id="image_file" accept="image/*" onchange="fileSelected();" /></div> </div> <div> <input type="button" value="Upload" onclick="startUploading()" /> </div> <div id="fileinfo"> <div id="filename"></div> <div id="filesize"></div> <div id="filetype"></div> <div id="filedim"></div> </div> <div id="error">Você deve selecionar apenas arquivos de imagem válidos!</div> <div id="error2">Ocorreu um erro ao enviar o arquivo</div> <div id="abort">O upload foi cancelado pelo usuário ou o navegador interrompeu a conexão</div> <div id="warnsize">Seu arquivo é muito grande. Não podemos aceitar isso. Selecione arquivos pequenos</div> <div id="progress_info"> <div id="progress"></div> <div id="progress_percent">&nbsp;</div> <div class="clear_both"></div> <div> <div id="speed">&nbsp;</div> <div id="remaining">&nbsp;</div> <div id="b_transfered">&nbsp;</div> <div class="clear_both"></div> </div> <div id="upload_response"></div> </div> </form> </div> </div> </div> upload-foto.js var iBytesUploaded = 0; var iBytesTotal = 0; var iPreviousBytesLoaded = 0; var iMaxFilesize = 1048576; // 1MB var oTimer = 0; var sResultFileSize = ''; function secondsToTime(secs) { // vamos usar esta função para converter os segundos no formato de hora normal var hr = Math.floor(secs / 3600); var min = Math.floor((secs - (hr * 3600))/60); var sec = Math.floor(secs - (hr * 3600) - (min * 60)); if (hr < 10) {hr = "0" + hr; } if (min < 10) {min = "0" + min;} if (sec < 10) {sec = "0" + sec;} if (hr) {hr = "00";} return hr + ':' + min + ':' + sec; }; function bytesToSize(bytes) { var sizes = ['Bytes', 'KB', 'MB']; if (bytes == 0) return 'n/a'; var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024))); return (bytes / Math.pow(1024, i)).toFixed(1) + ' ' + sizes[i]; }; function fileSelected() { // esconder diferentes avisos document.getElementById('upload_response').style.display = 'none'; document.getElementById('error').style.display = 'none'; document.getElementById('error2').style.display = 'none'; document.getElementById('abort').style.display = 'none'; document.getElementById('warnsize').style.display = 'none'; // obter o elemento de arquivo selecionado var oFile = document.getElementById('image_file').files[0]; // filtro para arquivos de imagem var rFilter = /^(image\/bmp|image\/gif|image\/jpeg|image\/png|image\/tiff)$/i; if (! rFilter.test(oFile.type)) { document.getElementById('error').style.display = 'block'; return; } // pequeno teste para o tamanho do arquivo if (oFile.size > iMaxFilesize) { document.getElementById('warnsize').style.display = 'block'; return; } // obter elemento de visualização var oImage = document.getElementById('preview'); // preparar HTML5 FileReader var oReader = new FileReader(); oReader.onload = function(e){ // e.target.result contém o DataURL que usaremos como fonte da imagem oImage.src = e.target.result; oImage.onload = function () { // binding onload event // vamos exibir algumas informações de imagem personalizada aqui sResultFileSize = bytesToSize(oFile.size); document.getElementById('fileinfo').style.display = 'block'; document.getElementById('filename').innerHTML = 'Name: ' + oFile.name; document.getElementById('filesize').innerHTML = 'Size: ' + sResultFileSize; document.getElementById('filetype').innerHTML = 'Type: ' + oFile.type; document.getElementById('filedim').innerHTML = 'Dimension: ' + oImage.naturalWidth + ' x ' + oImage.naturalHeight; }; }; // ler o arquivo selecionado como DataURL oReader.readAsDataURL(oFile); } function startUploading() { // limpar todos os estados de temperatura iPreviousBytesLoaded = 0; document.getElementById('upload_response').style.display = 'none'; document.getElementById('error').style.display = 'none'; document.getElementById('error2').style.display = 'none'; document.getElementById('abort').style.display = 'none'; document.getElementById('warnsize').style.display = 'none'; document.getElementById('progress_percent').innerHTML = ''; var oProgress = document.getElementById('progress'); oProgress.style.display = 'block'; oProgress.style.width = '0px'; // obter dados do formulário para POSTAGEM //var vFD = document.getElementById ('upload_form'). getFormData ();// para FF3 var vFD = new FormData(document.getElementById('upload_form')); // crie o objeto XMLHttpRequest, adicionando alguns ouvintes de evento e POSTANDO nossos dados var oXHR = new XMLHttpRequest(); oXHR.upload.addEventListener('progress', uploadProgress, false); oXHR.addEventListener('load', uploadFinish, false); oXHR.addEventListener('error', uploadError, false); oXHR.addEventListener('abort', uploadAbort, false); //oXHR.open('POST', 'upload.php', true); oXHR.send(vFD); // definir cronômetro interno oTimer = setInterval(doInnerUpdates, 300); } function doInnerUpdates() { // vamos usar esta função para mostrar a velocidade de upload var iCB = iBytesUploaded; var iDiff = iCB - iPreviousBytesLoaded; // se nada novo carregado - sair if (iDiff == 0) return; iPreviousBytesLoaded = iCB; iDiff = iDiff * 2; var iBytesRem = iBytesTotal - iPreviousBytesLoaded; var secondsRemaining = iBytesRem / iDiff; // atualizar informação de velocidade var iSpeed = iDiff.toString() + 'B/s'; if (iDiff > 1024 * 1024) { iSpeed = (Math.round(iDiff * 100/(1024*1024))/100).toString() + 'MB/s'; } else if (iDiff > 1024) { iSpeed = (Math.round(iDiff * 100/1024)/100).toString() + 'KB/s'; } document.getElementById('speed').innerHTML = iSpeed; document.getElementById('remaining').innerHTML = '| ' + secondsToTime(secondsRemaining); } function uploadProgress(e) { // processo de upload em andamento if (e.lengthComputable) { iBytesUploaded = e.loaded; iBytesTotal = e.total; var iPercentComplete = Math.round(e.loaded * 100 / e.total); var iBytesTransfered = bytesToSize(iBytesUploaded); document.getElementById('progress_percent').innerHTML = iPercentComplete.toString() + '%'; document.getElementById('progress').style.width = (iPercentComplete * 4).toString() + 'px'; document.getElementById('b_transfered').innerHTML = iBytesTransfered; if (iPercentComplete == 100) { var oUploadResponse = document.getElementById('upload_response'); oUploadResponse.innerHTML = '<h1>Aguarde ... processando</h1>'; oUploadResponse.style.display = 'block'; } } else { document.getElementById('progress').innerHTML = 'unable to compute'; } } function salvarFoto(e){ const express = require('express'); const multer = require('multer'); const app = express(); var port = 3000; var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, './upload') }, filename: function (req, file, cb) { cb(null, file.originalname) } }) var upload = multer({ storage: storage }) app.use('/a',express.static('/b')); app.use(express.static(__dirname + '/public')); app.use('/uploads', express.static('../upload')); app.post('/profile-upload', upload.single('image_file'), function (req, res, next) { console.log(JSON.stringify(req.file)) var response = '<a href="/">Home</a><br>' response += "Arquivos enviados com sucesso.<br>" response += `<img src="${req.file.path}" /><br>` return res.send(response) }) app.listen(port,() => console.log(`Server running on port ${port}!`)) } function uploadFinish(e) { // upload concluído com sucesso var oUploadResponse = document.getElementById('upload_response'); oUploadResponse.innerHTML = e.target.responseText; oUploadResponse.style.display = 'block'; document.getElementById('progress_percent').innerHTML = '100%'; document.getElementById('progress').style.width = '400px'; document.getElementById('filesize').innerHTML = sResultFileSize; document.getElementById('remaining').innerHTML = '| 00:00:00'; clearInterval(oTimer); salvarFoto(); } function uploadError(e) { // erro de upload document.getElementById('error2').style.display = 'block'; clearInterval(oTimer); } function uploadAbort(e) { // upload abortado document.getElementById('abort').style.display = 'block'; clearInterval(oTimer); }
  17. Bom, eu não fiquei parado e fui tentando ate conseguir converterem PDF, mas não está mostrando toda a tabela. Novo código somente do tableToPDF. function tableToPDF(){ html2canvas(document.getElementById('testTable'), { onrendered: function (canvas) { var data = canvas.toDataURL(); var docDefinition = { content: [{ image: data, height:700, width: 700, margin: 0, }] }; pdfMake.createPdf(docDefinition).download("Tabela.pdf"); } }); }
  18. Olá! Eu achei esse código que mostra convertendo uma tabela em Excel ou PDF e faz download do arquivo convertido: https://embed.plnkr.co/4LmtmuIv6RYM1JCW2Aaj/ Neste site, tanto Excel quanto PDF funciona perfeitamente, então eu adaptei esse código para uma pagina que estou trabalhando. Quando fui mexer no código, a parte do Excel já estava implementado e adaptado, então eu apenas coloquei do PDF. Só que não conseguir funcionar a parte do PDF, pois não fazia o download. Eu fui verificar o erro que estava dando e era que html2canvas não está definido em tableToPDF. Eu fiz varias mudanças e não conseguir fazer funcionar. Esse é o código, precisamente a parte que faz a conversão em Excel ou PDF, mostrando numa tabela na tela. <div class="panel panel-default " ng-class="{whirl:a.loadingP,traditional:a.loadingP}"> <div class="panel-body" ng-show="a.resultado"> <script type="text/javascript"> src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.min.js" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.22/pdfmake.min.js" var tableToExcel = (function () { var uri = 'data:application/vnd.ms-excel;base64,' , template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>' , base64 = function (s) { return window.btoa(unescape(encodeURIComponent(s))) } , format = function (s, c) { return s.replace(/{(\w+)}/g, function (m, p) { return c[p]; }) } return function (table, name) { if (!table.nodeType) table = document.getElementById(table) var ctx = { worksheet: name || 'Worksheet', table: table.innerHTML } window.location.href = uri + base64(format(template, ctx)) } })() var tableToPDF = (function () { html2canvas(document.getElementById(table), { onrendered: function (table) { var data = table.toDataURL(); var docDefinition = { content: [{ image: data, width: 500, }] }; pdfMake.createPdf(docDefinition).download("example.pdf"); pdfMake.createPdf(docDefinition).download("test.pdf"); } }); }) </script> <input type="button" onclick="tableToExcel('testTable', 'W3C Example Table')" value="Exportar para Excel"> <input type="button" onclick="tableToPDF('testTable')" value="Exportar para PDF"> <div class="scroll"> <div id="output"></div> </div> </div> </div>
  19. Olá pessoal! Bom, tem um sistema web que estou trabalhando que precisa mostrar uma solicitação de compra. Na pagina do Gerenciamento de Solicitação de Compras a pesquisa das solicitações funciona perfeitamente, ate ai tudo bem. Quando eu clico no botão da compra de status solicitado, no debbug ele chama a function editarSolicitacao function editarSolicitacao(item) { console.log(item.scpId); ger.detalheSolicitacao = false; debugger $state.go('app.editSolicitacaoCompras', { "idSolicitacao": item.scpId }); } Como ver, esse editSolicitacaoCompras é o caminho para a pagina de Edição Solicitação de Compras, porém ao invés de mostra o conteúdo certo, mostra o conteúdo da Home mesmo com a URL editSolicitacaoCompras, entretanto se eu aberto o F5, ele atualiza para o conteúdo certo. Os caminhos foram declarados certos, acredito que não esta dando refresh da pagina Edição Solicitação de Compras e procurei alguma solução e testei, mas não conseguir resolver.
  20. Valeu! Eu fiz as modificações conforme o que eu preciso. Eu pensei que acrescentei o <!DOCTYPE html>. KKKKK Mais uma vez, valeu!
  21. Olá! Eu preciso consumir uma API e apresentar o resultado em uma página HTML, onde vou criar um combo de seleção para receber os estados disponíveis para verificação da API e ao selecionar o estado preencher os campos de uma tabela com Casos Confirmados, Mortes, Recuperados e Vacinados. Bom, eu testei com outros APIs para entender como funcionava o consumo e funcionou perfeitamente, mas justo o API do COVID 19 que não funciona. O dados que eu preciso estão no campo total. O API é esse: https://data.covid19india.org/v4/min/data.min.json Alguém pode meu ajudar? Segue os códigos. server.js const cors = require('cors') const { json } = require('express') const express = require('express') const app = express() const axios = require('axios') app.use(cors()) app.get('/', async(req, res) => { // response é a resposta do axios MAS eu tiro o data de dentro do response const { data } = await axios('https://data.covid19india.org/v4/min/data.min.json') return res.json(data) }) app.listen('4567') index.html <html> <head> <title>Consumindo API</title> <link rel="stylesheet" type="text/css" href="style.css" media="screen" /> </head> <body> <main></main> </body> <script> async function getContent() { try { const response = await fetch('http://localhost:4567') //console.log(response) const data = await response.json() show(data) } catch (error) { console.log("ERROU!!!") } } getContent() function show(users) { let output = '' output += `<table>` output += `<tr>` output += `<td>ID</td>` output += `</tr>` for (let user of users) { output += `<tr>` output += `<td>${user.total.confirmed}</td>` output += `</tr>` } output += `</table>` document.querySelector('main').innerHTML = output } </script> </html>
  22. Ola pessoal! Eu instalei um V-NAND SSD 1TB 860 QVO da Samsung para ter um maior desempenho no meu notebook Core i5 de 8 GB RAM da ASUS. Antes, no HD de 500GB, eu usava o Panda Dome e me atendia bem, até que ele parou de iniciar junto com o Windows 10. Eu procurei por melhores antivírus de 2020 e cada site mostrava uma lista diferente. Verificando nesta parte do fórum, vi que cada um recomenda um antivírus, mas o outro conta casos do mesmo que não é bom. Bom, para ficar fácil, eu preciso de um antivírus que seja o mais completo possível e que ele e suas configurações não pensem tanto enquanto realizo outras tarefas no notebook. qual vocês recomendam para mim?
  23. @mick 07 Na ordem que você postou! https://www.virustotal.com/gui/file/b538675b1e5e9eeb141862d1854949fbf20a3aba40adea5676111fe3a9100ad8/detection https://virusscan.jotti.org/pt-BR/filescanjob/renku6sk7h https://r.virscan.org/language/pt-br/report/e43763e88a5d8bff9f7fb5432ac515cf É um Trojan, algum anti-malware recomendado?
  24. Olá a todos! Eu vi pelo Gerenciador de Tarefas que estava iniciando um windows.vbs. No Google não achei muita coisa sobre ele, mas li que trata-se de um virus, mas prefiro perguntar aqui primeiro. Caso seja vírus, como removo? Meu antivírus anda Dome não reconheceu como vírus.
  25. Olá pessoal! Eu instalei o Micrsoft SQL Server Management Studio para criar o Banco de Dados do site de Controle de Estoque feito em C#. Eu já tinha instalado o MySQL Workbench, mas como eu estou seguindo uma vídeo-aula, preferir instalar o Micrsoft SQL Server Management Studio. Ao clicar em Conectar, deu esse erro abaixo. Tenha alguma coisa que eu tenha esquecido de instalar? Eu preciso de ajuda!

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!