[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:

<?phpnamespace Adianti\\Service;/** * File uploader listener * * @version    2.0 * @package    service * @author     Nataniel Rabaioli * @author     Pablo Dall'Oglio * @copyright  Copyright (c) 2006-2014 Adianti Solutions Ltd. (http://www.adianti.com.br) * @license    http://www.adianti.com.br/framework-license */class AdiantiUploaderService {    private function reArrayFiles($file_post) {        $file_ary = array();        $file_count = count($file_post['name']);        $file_keys = array_keys($file_post);        for ($i = 0; $i < $file_count; $i++) {            foreach ($file_keys as $key) {                $file_ary[$i][$key] = $file_post[$key][$i];            }        }        return $file_ary;    }    function show() {        $folder = 'tmp/';        $response = array();        $_FILES['fileName'] = $this->reArrayFiles($_FILES['fileName']);        if (count($_FILES['fileName']) > 0) {            foreach ($_FILES['fileName'] as $file) {                if ($file['error'] === 0 && $file['size'] > 0) {                    $path = $folder . $file['name'];                    if (is_writable($folder)) {                        if (move_uploaded_file($file['tmp_name'], $path)) {                            $response['type'] = 'success';                            $response['fileName'] = $file['name'];                        } else {                            $response['type'] = 'error';                            $response['msg'] = '';                        }                    } else {                        $response['type'] = 'error';                        $response['msg'] = "Permission denied: {$path}";                    }                                    }            }            echo json_encode($response);        }    }}?>


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

<?php        $photo = new TFile('photo');        $photo->setProperty("multiple", true);?>

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 Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework 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.