Ajax - upload de foto

6 respostas
php
S

Boa tarde alguem poderia me ajudar? Peguei um script na internet em AJAX para fazer upload de fotos.

Funciona maravilha, mas preciso salvar a imagem com o nome dela para poder indexar ao ID do produto:

Esse é o codigo para salvar na pasta do servidor mas cria um id aleatório e eu preciso do nome original da foto. Como eu poderia fazer essa alteração?

// Gerando nome aleatório para a imagem
$nome = md5(uniqid(time()));

// Salvando imagem em disco
file_put_contents("../img/{$nome}.jpg", $dados);

6 Respostas

L

Como o ajax está mandando o upload?

S

Boa tarde LostSoldier obrigado. O Ajax manda assim:

<?php // Recuperando imagem em base64 // Exemplo: data:image/png;base64,AAAFBfj42Pj4 $imagem = $_POST['imagem']; // Separando tipo dos dados da imagem // $tipo: data:image/png // $dados: base64,AAAFBfj42Pj4 list($tipo, $dados) = explode(';', $imagem); // Isolando apenas o tipo da imagem // $tipo: image/png list(, $tipo) = explode(':', $tipo); // Isolando apenas os dados da imagem // $dados: AAAFBfj42Pj4 list(, $dados) = explode(',', $dados); // Convertendo base64 para imagem $dados = base64_decode($dados); // Salvando imagem em disco file_put_contents("../img/.jpg", $dados);
L

Essa é a recepção do php, enfim, lá no cliente (html/js) você pode ver como ele manda e incluir um parâmetro no post para esse php pegá-lo, por exemplo…

$nome = $_POST['nome'];
$imagem = $_POST['imagem'];
//...
S

Oi Lost Soldier, no HTML está assim:

L

Essa linha:

$.post('ajax/salvar.php', {imagem: imagem}, function() {
...

Não conheço a api photo que você está usando, mas essa linha pode ficar assim:

$.post('ajax/salvar.php', {imagem: imagem, nome: 'nome da foto'}, function() {
...

Talvez sua api dê um atributo src, por exemplo, ou name…

$.post('ajax/salvar.php', {imagem: imagem, nome: imagem.src}, function() {
//ou
$.post('ajax/salvar.php', {imagem: imagem, nome: imagem.name}, function() {

Cabe a você pesquisar na documentação da sua api para saber…

Já o php continua assim:

$nome = basename($_POST['nome']); /*uma pequena diferença aqui*/
$imagem = $_POST['imagem'];

A função basename retorna o nome do arquivo, caso ele venha dessa forma por exemplo:

C:\Downloads\arquivo.png

Ficaria:

arquivo.png

Agora é contigo, boa sorte

S

Olá Lost Soldier a api não vem com nenhum atributo somente
$.post(‘ajax/salvar.php’, {imagem: imagem}, function() {

e também ela gera um nome aleatório md5 e salva a imagem na pasta img e não salva este nome no BD

// Gerando nome aleatório para a imagem
$nome = md5(uniqid(time()));

// Salvando imagem em disco
file_put_contents("…/img/{$nome}.jpg", $dados);

Desta forma não consigo relacionar o nome da imagem com a ID do BD

Criado 21 de dezembro de 2016
Ultima resposta 29 de dez. de 2016
Respostas 6
Participantes 2