Upload de imagem com AJAX/PHP
Boa tarde.
O problema em específico é no PHP, no Javascript está tudo indo bem então abri o tópico por aqui.
O problema:
Enviar as propriedades de um arquivo para o PHP com AJAX e conseguir ler o array contendo os seus respectivos valores.
O que eu fiz com Query:
$('.submit').on('click', function(e){
var id_form = $(this).parents('.frms').attr('id'),
// Create a new object FormData for this form, like a serialize()
formData = new FormData($("#" + id_form)[0]);
// Add a new index no_inc
formData.append('no_inc', 1);
// Add a new index image
if($('input[type=file]')[0].files[0] != null){
formData.append('image', $('input[type=file]')[0].files[0]);
}
$.ajax({
url: './ajax/submit.php',
data: formData,
processData: false,
contentType: false,
type: 'post',
dataType: 'json',
...
O que eu fiz com PHP:
if(isset($action) && ($action == 'modules')):
var_dump(filter_input_array(INPUT_POST, FILTER_DEFAULT));
....
A resposta do servidor:
array(5) {
["action"]=> string(7) "modules"
["name"]=> string(0) ""
["url"]=> string(0) ""
["status"]=> string(1) "2"
["no_inc"]=> string(1) "1"
}
Como podem ver o parâmetro image não está sendo enviado. Isso há muito tempo é um paradigma pra mim, e eu confesso que é por falta de conhecimento, para um tempo pra estudar o que realmente acontece. Ai fui pesquisar e descobri o FormData, uma opção pra tratar arrays de forma que eu possa modificar, remover ou acrescentar índices à ele. Muito bom.
Agora na hora de receber essas informações penso estar deixando passar alguma coisa. A primeira e principal dela é o fato do parâmetro não chegar até meu arquivo PHP. Logo não tenho um valor válido pra trabalhar.
As pesquisas não param e vocês, o que acham? Estou deixando passar mais alguma coisa ou existe alguma manobra necessária para trabalhar com upload de imagens dessa forma?
Aonde estou querendo chegar? Aqui!
$_FILES['image']['tmp_name']
Mas vamos por parte, porque primeiro preciso conseguir acessar o valor do índice image do meu ajax.
Seguindo... descobri mais algumas coisas rs
O problema é mesmo com o valor do parâmetro recuperado para a imagem. Caso eu coloque qualquer outro valor o índice é passado normalmente.
array(6) {
["action"]=> string(7) "modules"
["name"]=> string(0) ""
["url"]=> string(0) ""
["status"]=> string(1) "2"
["no_inc"]=> string(1) "1"
["image"]=> string(4) "test"
}
Outra coisa que percebi pelo debug é que alguns parâmetro são perdidos nessa forma, o que me faz pensar se realmente é possível fazer isso de forma direta sem o uso de plugins já prontos. Por exemplo o diretório temporário do arquivo, não é passado.
lastModified: 1449956707826
lastModifiedDate: Sat Dec 12 2015 19:45:07 GMT-0200 (Horário brasileiro de verão) {}
name: "12348021_1673134709597287_1819571186132594684_n.jpg"
size: 50136
type: "image/jpeg"
webkitRelativePath: ""
slice: slice()
Discussão (3)
Carregando comentários...