Ir para o conteúdo

 Voltar a Fórum do For...
Tela cheia

Upload de Arquivos assincronos - Setando diretório e nome do arquivo

29 de Agosto de 2013, 9:21 , por Desconhecido - | 1 Pessoa seguindo este artigo.
Visualizado 17 vezes

Pessoal, criei a página de upload e estou apemas com um problema, é possível setar o nome e o diretório do arquivo no repositório temporário onde será salvo? Verifiquei que a função monta automáticamente estas variáveis, mas não vi como alterá-las...

Desde já agradeço.

Autor: miguel Patrocinio


33 comentários

  • 54a7c4a15d159fa1263f658905a2b92c?only path=false&size=50&d=404Marcelo Lopes(usuário não autenticado)
    30 de Agosto de 2013, 15:49

     

    Miguel,

    Crie uma variável tempName com get e set na sua VO. Na sua ação salvar faça assim:

    if ($_POST['meu_campo_arquivo']){

    $vo->settempName( $frm->getBase() . $_POST[ 'meu_campo_arquivo_temp_name' ] );

     

    E na sua DAO, na ação incluir, antes do executeSql:

    $origem = $objVo->gettempName();

    $destino = 'anexos/'.$objVo->gettempName(); 

    if( copy($origem,$destino) )

    {

    return self::executeSql(.....)

    Note que na variável $destino, a pasta pra onde o arquivo será movido se chamará 'anexos' e está no mesmo nível do índex da aplicação.

    Abraços

    Marcelo Lopes 

    • 51b06d6eae66e2cfdfc361d418eea715?only path=false&size=50&d=404Luis Eugênio barbosa(usuário não autenticado)
      1 de Setembro de 2013, 8:26

       

      Miguel,

      complementando a resposta do Marcelo, segue outro exemplo:

      Caso você esteja precisando mover o arquivo recebido para um diretório específico da aplicação, logo após o upload terminar, faça o seguinte:

      O campo upload do formdin, sempre vai gravar um hash do nome do arquivo recebido no diretório base/tmp, isto, ainda não dá para mexer. Neste caso você terá que utilizar a função callback do campo FileAsync que receberá 4 parâmetros referentes ao arquivo selecionado pelo usuário, que são:

      1) tempName = nome temporário do arquivo no diretório base/tmp. Ex: base/tmp/upload_e1bd2ec4be2ec17540907047b160d0eb
      2) fileName = nome real do arquivo. Ex: meu_documento.pdf
      3) type = é extensão do arquivo. Ex: pdf
      4) size = tamanho do arquivo em bytes. Ex: 477418

      Com estas informações, em mãos, você terá que chamar uma ação ( action ) para mover o arquivo do diretório base/tmp para o diretório desejado, e para isso o melhor caminho é fazer uma requisição ajax, passando no mínimo 02 parametros, que são: tempName e fileName para que você possa mover ou copir o arquivo.

      // Exemplo da criação do campo arquivo no FormDin:
      $frm->addFileField('anexo_async','Anexo Async:',true,'pdf,gif,txt,jpg,doc,xls,odt','4M',40,true,null,'callBackAnexar');

      //Exemplo da função de callback:
      function callBackAnexar(tempName,fileName,type,size)
      {
          if( String( fileName) !== '' && parseInt( size ) > 0 )
          {
              // mover o arquivo para o diretório desejado da aplicação
              fwAjaxRequest({
                  action:'moverArquivo'
                  ,data:{"tempName":tempName,"fileName":fileName}
                  ,dataType:'text'
                  ,async:false // para exibir a mensagem copiando...
                  ,msgLoading:'Copiando arquivo '+fileName
                  ,callback:function(resultado)
                  {
                      //alert( resultado );
                      fwAlert( resultado );
                      fwClearFileAsync('anexo_async');// limpar o campo no formulário.
                  }
              });
          }
      }

      // Exemplo da ação moverArquivo em PHP utilizando switch/case, o correto é colocar no diretório action do modulo e utilizar a função $frm->processAction()

          case 'moverArquivo':

              // remover o utf8 da chamada ajax para preservar os acentos e caracteres especiais caso tenha
              $_POST['fileName'] = utf8_decode($_POST['fileName']);

              //if( copy( $_POST['tempName'],'arquivos/'.$_POST['fileName']) ) // para manter o temporário
              if( rename( $_POST['tempName'],'arquivos/'.$_POST['fileName']) ) // para apagar o temporário
              {
                  // estilizar o retorno para a utilizar a função fwAlert()
                  die('<span style="color:green;font-size:14px;font-weight:bold;">Arquivo '.$_POST['fileName'].' copiado com SUCESSO!</span>');
              }
              die('<span style="color:red;font-size:14px;font-weight:bold;">ERRO ao mover o arquivo para o diretório destino!</span>');
          break;

      Abraço.

      • 627deb302718fab26e0859ab3843cb50?only path=false&size=50&d=404miguel Patrocinio(usuário não autenticado)
        2 de Setembro de 2013, 10:07

         

        Ok, Marcelo e Eugenio obrigado pelo retorno!

        Vou verificar a melhor forma de implementar o que estou precisando, mas basicamente é copiar o arquivo para um outro diretório.

Essa comunidade não possui posts nesse blog