Usando Ajax para fazer upload de arquivo

BDeGiglio

Eu tentei várias variações disso (com base em artigos e outros fóruns SO) para fazer isso funcionar e reduzi ao fato de que os dados estão se perdendo quando tento enviar os dados do formulário para o meu script PHP. Quando echo $ _FILES ["arquivo"] ["nome"], ele está vazio.

Eu testei e meus scripts ajax e php estão conectados, pois posso retornar alguns dados, mas não quaisquer dados de formulário. Obviamente, isso faz com que os arquivos não sejam carregados.

Meu código atual é uma referência a este fórum (resposta de lee8oi): jQuery Ajax File Upload Comecei um novo fórum porque esta pergunta foi feita há 6 anos.

html:

<form id="signUpForm" name="signUpForm"  action="../functions/newUser.php" method="post">
    <input type="file" class="su_photo" name="file" id="user-photo">
    <input type="submit" id="sign-up" type="button" class="btn btn-primary btn-sm pull-right" value="Get Started">
</form>

js:

  $('#signUpForm').on('submit',function(){
        var fd = new FormData( $('#signUpForm') );
        fd.append("label", "WEBUPLOAD");
        $.ajax({
          url: "../../functions/newUser.php",
          type: "POST",
          data: fd,
          processData: false,  // tell jQuery not to process the data
          contentType: false   // tell jQuery not to set contentType
        }).done(function( data ) {
            console.log("PHP Output:");
            console.log( data );
        });
        return false;
    });

php:

   if ($_POST["label"]) {
      $label = $_POST["label"];
    }
    $allowedExts = array("gif", "jpeg", "jpg", "png");
    $temp = explode(".", $_FILES["file"]["name"]);
    $extension = end($temp);
    if ((($_FILES["file"]["type"] == "image/gif")
    || ($_FILES["file"]["type"] == "image/jpeg")
    || ($_FILES["file"]["type"] == "image/jpg")
    || ($_FILES["file"]["type"] == "image/pjpeg")
    || ($_FILES["file"]["type"] == "image/x-png")
    || ($_FILES["file"]["type"] == "image/png"))
    && ($_FILES["file"]["size"] < 200000)
    && in_array($extension, $allowedExts)) {
        if ($_FILES["file"]["error"] > 0) {
            echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
        } else {
            $filename = $label.$_FILES["file"]["name"];
            echo "Upload: " . $_FILES["file"]["name"] . "<br>";
            echo "Type: " . $_FILES["file"]["type"] . "<br>";
            echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
            echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

            if (file_exists("uploads/" . $filename)) {
                echo $filename . " already exists. ";
            } else {
                move_uploaded_file($_FILES["file"]["tmp_name"],
                "uploads/" . $filename);
                echo "Stored in: " . "uploads/" . $filename;
            }
        }
    } else {
        echo $_FILES["file"]["name"];
    }
Mikey

Eu acho que você só precisa mudar a seguinte linha

var fd = new FormData( $('#signUpForm') );

para

var fd = new FormData( $('#signUpForm')[0] );

ou

var fd = new FormData(this);

O construtor de FormData espera um elemento de formulário nativo, não um objeto jQuery. Então document.getElementById('signUpForm'), $('#signUpForm')[0]e thistudo funcionaria.

Esta resposta fornece mais explicações.

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Usando MultipartRequest para fazer upload de arquivo

incapaz de fazer upload de arquivo em codeigniter usando AJAX

Como fazer upload de arquivo usando ajax no codeigniter

Como fazer upload de um arquivo usando Ajax no POST?

como usar ajax para fazer upload de imagem de arquivo?

Jogo Ansible para fazer upload de arquivo ftp usando lftp

Como fazer upload de arquivo usando upload de arquivo ajax e Spring mvc?

API GitHub para fazer upload de imagem usando ajax

Arquivo de upload de PHP para Ajax usando onchange

Como fazer upload de arquivo usando restify

Como fazer upload de arquivo usando Koa?

Como faço para usar requests.put () para fazer upload de um arquivo usando Python?

Como fazer upload de um arquivo usando jQuery.ajax e FormData

Como fazer upload de um arquivo usando uma chamada ajax em flask

Nodejs - não é possível fazer upload de arquivo usando multer via ajax

Não é possível fazer upload de um arquivo usando ajax

Como fazer upload de arquivo usando Ajax No Laravel estou recebendo o erro 419 (status desconhecido)

Kendo upload usando Ajax Post para fazer upload de arquivos no núcleo MVC

Não é possível fazer upload de um arquivo para a Base de conhecimento QnaMaker usando SDK

Como fazer o upload de um arquivo de 200 MB corretamente para o GitHub usando LFS

Solicitações PUT para fazer upload de um arquivo em dados de formulário usando caratê

Usando VichUploaderBundle para fazer upload de um arquivo por meio de uma API

Como fazer upload de imagem / arquivo de Vue js para Laravel7 usando axios

Existe uma maneira de fazer upload de arquivo para EFS do sistema local usando java?

Erro de upload de arquivo CodeIgniter “Você não selecionou um arquivo para enviar” usando Ajax

Como posso fazer upload de um arquivo para o servidor, sem navegador, usando go?

Como fazer upload de um arquivo para Amazon Glacier Deep Archive usando boto3

Como fazer o upload de um arquivo usando a API fetch em Javascript para um controlador Laravel?

Como fazer upload de um arquivo para o site file.io usando Python