I'm uploading files with html5 , ajax and php .
All is well, the recording in the bank is done, the upload is done, but the image, when you see it in windows explorer, even though it is there, but you can not see it.
The name is correct, it has the extension.
It looks like a uploader flaw.
What can be done?
Follow the code:
FORM
<div class="plano">
<h1 class="titulos">Cadastro de Plano</h1>
<form method="post" class="planoCadastrar" method="post" enctype="multipart/form-data">
<input type="text" name="nomePlano" id="nomePlano" class="typeTextMedio" placeholder="Nome" required /><br /><br />
<textarea placeholder="Descrição" class="textarea" name="descricao" id="descricao" cols="93" rows="15" required></textarea><br /> <br />
<div id="multiple_upload">
<input type="hidden" id="arquivos" name="arquivos" />
<input type="file" multiple
id="fotos"
name="fotos[]"
accept=".jpg, .png, image/jpg, image/png" />
<div id="message">Selecionar fotos</div>
<div id="lista"></div>
</div>
<img class="spinner" src="../_img/_bannerImgs/spinner.gif" />
<input type="submit" class="btnAcesso" value="Enviar" />
<label class="resposta"></label>
</form><br /><br />
<script>
$('.elevate-image').ezPlus({
zoomType: 'inner',
cursor: 'crosshair'
});
</script>
</div>
JQuery
// JavaScript Document
$(document).ready(function(e) {
$("div.conteudo div.plano form.planoEditar").on("submit", function() {
var idPlano = $("div.conteudo div.plano form.planoEditar input[type=hidden]#idPlano").val();
var nomePlano = $("div.conteudo div.plano form.planoEditar input[type=text]#nomePlano").val();
var descricao = $("div.conteudo div.plano form.planoEditar textarea#descricao").val();
if ( nomePlano == "" ||
idPlano == "" ||
descricao == "") {
alert("Algum campo está vazio!");
return false;
}
$("div.conteudo div.plano form.planoEditar input[type=submit].btnAcesso").css('display', 'none');
$("div.conteudo div.plano.planoEditar form img").css('display', 'block');
$("div.conteudo div.plano form input[type=submit].btnAcesso").css('display', 'none');
$("div.conteudo div.plano form img").css('display', 'block');
var formData = new FormData(this);
$.ajax({
url: "../_requeridos/editaPlano.php",
type: 'POST',
data: formData,
beforeSend: function() {
},
success: function (retorno) {
$("div.conteudo div.plano form.planoEditar input[type=submit].btnAcesso").css('display', 'block');
$("div.conteudo div.plano.planoEditar form img").css('display', 'none');
if (retorno == 1) {
resposta = "Plano cadastrado com sucesso!";
} else {
resposta = "Erro no cadastro do Plano";
}
$(".resposta").css("display", "block");
$(".resposta").html(resposta);
},
cache: false,
contentType: false,
processData: false
});
return false;
});
});
php
<?php
require_once "../_controles/_conexao/Conexao.php";
require_once "../_controles/_util/PhpUtil.php";
require_once "../_controles/_util/Constantes.php";
require_once "../_controles/_models/Planos.php";
require_once "../_controles/_models/Fotos.php";
require_once "../_controles/_models/Upload.php";
require_once "../_controles/_daos/PlanosDao.php";
require_once "../_controles/_daos/FotosDao.php";
require_once "../_controles/_daos/UploadDao.php";
$connection = new Conexao();
$conexao = $connection->abreConexao();
$phpUtil = new PhpUtil();
$constantes = new Constantes();
$planosDao = new PlanosDao($conexao);
$fotosDao = new FotosDao($conexao);
$nomePlano = $_POST["nomePlano"];
$descricao = $_POST["descricao"];
$plano = new Planos(
$nomePlano,
$descricao);
$cadastro = $planosDao->cadastrar($plano);
$ultimoId = $planosDao->ultimoIdCadastrado();
require_once "upload.php";
echo $cadastro ? 1 : 2;
?>
upload.php
<?php
///////////////////////////UPLOAD DAS FOTOS////////////////////////////////////
$arquivos1 = explode ("|", $_POST["arquivos"]);
$arquivos2 = $_FILES["fotos"];
$arquivos = $fotosDao->arrayFotos($arquivos1, $arquivos2);
if(sizeof($arquivos)) {
foreach($arquivos as $fotografia) {
$upload = new Upload($fotografia, "../_img/_fotos");
$uploadDao = new UploadDao($upload);
// tamanho de erro 5MB = 5 * 1024 * 1024 = 5242880
$erro = $uploadDao->erro(5242880);
if($erro[0] == 0) {
$envio = $uploadDao->uploadFile();
if($envio[0]==0) ;
$nomeImagem = $upload->getNomeBanco();
} else {
$phpUtil->erro($erro[1]);
}
$fotosDao->cadastrar ($ultimoId, $upload->getNomeBanco());
}
}
////////////////////////////UPLOAD DAS FOTOS////////////////////////////////////
?>
See how it is in Windows Explorer
Ontime:
UploadDao.php
<?phpclassUploadDao{private$arquivo;publicfunction__construct($_upload){$this->arquivo=$_upload;}/*Errosdoarquivo;erro($_tamanho)Onde$_tamanhoéembits,ouseja,5MB-5*1024*1024=*/publicfunctionerro($_tamanho){$mensagem="Sem erros!";
$erro = 0;
if(isset($this->arquivo)) {
if (
$this->arquivo->getExtensao() != "JPG" &&
$this->arquivo->getExtensao() != "jpg" &&
$this->arquivo->getExtensao() != "JPEG" &&
$this->arquivo->getExtensao() != "jpeg" &&
$this->arquivo->getExtensao() != "PNG" &&
$this->arquivo->getExtensao() != "png"
) {
$mensagem = "Imagem precisa ser nos formatos: jpg, JPG, jpeg, JPEG, png, PNG";
$erro = 1;
} else if ($this->arquivo->getTamanho() >= $_tamanho ) {
$mensagem = "Tamanho máximo da Imagem é de ".($_tamanho/(1024*1024))." MB";
$erro = 2;
}
}
return array($erro, $mensagem, $this->arquivo->getTamanho()/(1024*1024));
}
public function uploadFile() {
$erro = 0;
$mensagem = "Sucesso";
try {
$urlEnvio = $this->arquivo->getEndereco()."/".$this->arquivo->getNomeBanco();
move_uploaded_file($this->arquivo->getNomeTemporario(), $urlEnvio);
} catch (Exception $e) {
$erro = 1;
$mensagem = "falha no envio";
}
return array($erro, $mensagem);
}
private function geraMiniatura ($_largura, $_url) {
//CRIA UMA NOVA IMAGEM
if( $this->arquivo->getExtensao() == "JPG" || $this->arquivo->getExtensao() == "jpg" ) {
$imagem_orig = ImageCreateFromJPEG($this->arquivo->getNomeTemporario());
} else if( $this->arquivo->getExtensao() == "JPEG" || $this->arquivo->getExtensao() == "jpeg") {
$imagem_orig = ImageCreateFromJPEG($this->arquivo->getNomeTemporario());
} else if( $this->arquivo->getExtensao() == "PNG" || $this->arquivo->getExtensao() == "png") {
$imagem_orig = ImageCreateFromPNG($this->arquivo->getNomeTemporario());
}
//LARGURA
$pontoX = ImagesX($imagem_orig);
//ALTURA
$pontoY = ImagesY($imagem_orig);
//DEFINE OS PARÂMETROS DA MINIATURA
$largura = $_largura;
$altura = ($pontoY * $largura) / $pontoX;
//CRIA O THUMBNAIL
$imagem_fin = ImageCreateTrueColor($largura, $altura);
//COPIA A IMAGEM ORIGINAL PARA DENTRO
ImageCopyResampled($imagem_fin, $imagem_orig, 0, 0, 0, 0, $largura+1, $altura+1, $pontoX, $pontoY);
//SALVA A IMAGEM
ImageJPEG($imagem_fin, $_url,100);
//LIBERA A MEMÓRIA
ImageDestroy($imagem_orig);
ImageDestroy($imagem_fin);
}
}
?>
Upload.php
<?php
class Upload {
private $nome;
private $nomeBanco;
private $nomeTemporario;
private $largura;
private $altura;
private $tamanho;
private $endereco;
private $extensao;
public function __construct ($_file, $_url) {
$dimensoes = getimagesize($_file["tmp_name"]);
$this->extensao = pathinfo($_file["name"], PATHINFO_EXTENSION);
$this->nome = $_file["name"];
$this->nomeBanco = $this->setNomeBanco();
$this->nomeTemporario = $_file["tmp_name"];
$this->largura = $dimensoes[0];
$this->altura = $dimensoes[1];
$this->tamanho = $_file["size"];
$this->endereco = $_url;
}
public function setNomeBanco () {
return md5(uniqid(time())).".". $this->extensao;
}
public function getNome() {
return $this->nome;
}
public function getNomeBanco() {
return $this->nomeBanco;
}
public function getNomeTemporario() {
return $this->nomeTemporario;
}
public function getLargura() {
return $this->largura;
}
public function getAltura() {
return $this->altura;
}
public function getTamanho() {
return $this->tamanho;
}
public function getEndereco() {
return $this->endereco;
}
public function getExtensao() {
return $this->extensao;
}
}
?>