Lançado Adianti Framework 7.6!
Clique aqui para saber mais
[DUVIDA] TFile - Upload de vários arquivos simultaneamente Olá pessoal, durante o desenvolvimento de uma aplicação eu necessitei utilizar um TFile, movido pela curiosidade resolvi entender como funciona o processo de upload de arquivos que o TFile faz antes do submit do form. Então localizei os seguintes arquivos: lib/adianti/include/components.min.js lib/adianti/include/tfile/tfile.js lib/adianti/service/AdiantiUploaderService.php Pois bem, ...
JD
[DUVIDA] TFile - Upload de vários arquivos simultaneamente  
Fechado
Olá pessoal, durante o desenvolvimento de uma aplicação eu necessitei utilizar um TFile, movido pela curiosidade resolvi entender como funciona o processo de upload de arquivos que o TFile faz antes do submit do form.
Então localizei os seguintes arquivos:

lib/adianti/include/components.min.js
lib/adianti/include/tfile/tfile.js
lib/adianti/service/AdiantiUploaderService.php

Pois bem, ao analisar os arquivos eu constatei que um TFile só é capaz de enviar um único arquivo, pensei em varias maneiras para faze-lo enviar vários arquivos e a maneira que me veio em mente foi a seguinte:

1 - Modifiquei o arquivo "libraries.html" trocando a requisição do arquivo "lib/adianti/include/components.min.js" para "lib/adianti/include/components.js"
2 - Modifiquei o arquivo "lib/adianti/include/tfile/tfile.js"
trocando isso:
var file = fileInput.files[0]; formData.append('fileName', file);

Por isso:
var files = fileInput.files; var nameData = 'fileName[]'; for (var i = 0; i < files.length; i++) { formData.append(nameData, files[i]); }


3 - Modifiquei o arquivo "lib/adianti/service/AdiantiUploaderService.php" para:

  1. <?php
  2. namespace Adianti\\Service;
  3. /**
  4.  * File uploader listener
  5.  *
  6.  * @version    2.0
  7.  * @package    service
  8.  * @author     Nataniel Rabaioli
  9.  * @author     Pablo Dall'Oglio
  10.  * @copyright  Copyright (c) 2006-2014 Adianti Solutions Ltd. (http://www.adianti.com.br)
  11.  * @license    http://www.adianti.com.br/framework-license
  12.  */
  13. class AdiantiUploaderService {
  14.     private function reArrayFiles($file_post) {
  15.         $file_ary = array();
  16.         $file_count count($file_post['name']);
  17.         $file_keys array_keys($file_post);
  18.         for ($i 0$i $file_count$i++) {
  19.             foreach ($file_keys as $key) {
  20.                 $file_ary[$i][$key] = $file_post[$key][$i];
  21.             }
  22.         }
  23.         return $file_ary;
  24.     }
  25.     function show() {
  26.         $folder 'tmp/';
  27.         $response = array();
  28.         $_FILES['fileName'] = $this->reArrayFiles($_FILES['fileName']);
  29.         if (count($_FILES['fileName']) > 0) {
  30.             foreach ($_FILES['fileName'] as $file) {
  31.                 if ($file['error'] === && $file['size'] > 0) {
  32.                     $path $folder $file['name'];
  33.                     if (is_writable($folder)) {
  34.                         if (move_uploaded_file($file['tmp_name'], $path)) {
  35.                             $response['type'] = 'success';
  36.                             $response['fileName'] = $file['name'];
  37.                         } else {
  38.                             $response['type'] = 'error';
  39.                             $response['msg'] = '';
  40.                         }
  41.                     } else {
  42.                         $response['type'] = 'error';
  43.                         $response['msg'] = "Permission denied: {$path}";
  44.                     }
  45.                     
  46.                 }
  47.             }
  48.             echo json_encode($response);
  49.         }
  50.     }
  51. }
  52. ?>


O código funcionou perfeitamente, agora o TFile pode enviar varios arquivos é só usar:

  1. <?php
  2.         $photo = new TFile('photo');
  3.         $photo->setProperty("multiple"true);
  4. ?>

A minha dúvida é se eu fiz da maneira correta? E se há uma maneira de fazer isso sem ter que alterar os fontes do framework?
Obrigado.

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (1)


DP

Jheferson, tudo bem?

Também precisei dessa função, mas acabei deixando para desenvolver essa parte no final do meu projeto.

Segundo nosso amigo Pablo, nessa nova versão do Framework 3, foi desenvolvido uma nova classe chamada TMultiFile.

Não testei ainda mas segundo o Pablo essa classe faz o que você precisa.