Skip to content

The Dummy Programmer

Stories of daily programming

  • Home
  • My other dummy projects
  • Games
    • Space Y: An Asteroids clone
  • Services
    • What’s my user agent
    • What’s my IP address
  • About
  • Toggle search form

HTML AJAX image upload & preview with JQuery and PHP

Posted on August 3, 2018September 9, 2018 By

In this post I will show you how to create a simple HTML form to make an AJAX image upload using jQuery and PHP. In this way you can build a form which doesn’t require postbacks to upload a file.

Let’s start creating the main PHP page by placing the necessary markup. I’ll call this page “upload.php”. The code is here:

<?php
   /*
   *	https://www.thedummyprogrammer.com
   */

   $urlPreview = "";
	
   if (isset($_POST['hidFileId']))
   {
     $hidFileIdValue = $_POST['hidFileId'];
     $urlPreview = "src='/testupload/uploadedfiles/" . $_POST['hidFileId']."'";
   }
?>
<!DOCTYPE html>
<html>
  <head>
    <title>Test upload</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="upload.js"></script>
  </head>

  <body>
    <form action="upload.php" method="post">
      <div>Select a file to upload</div>
        <div>
          <input id="fileUpload" type="file" />
          <input id="btnUpload" type="button" value="Upload" />
          <input id="hidFileId" name="hidFileId" type="hidden" value="<?php echo $hidFileIdValue ?>" />
        </div>
      <div>
        <img id="imgPreview" <?php echo $urlPreview ?> style="width:400px;height:400px" />
      </div>
      <div><input type="submit" value="Post form" /></div>
    </form>
  </body> 
</html>

Note that in the <head> section the page references two scripts:

  • the jQuery library using the link provided by Google
  • a file called “upload.js” that I’m going to create and explain below

I want to show the preview of the image as soon as the file is uploded, and I need a way to reference the file uploaded from PHP side after pressing the submit button. This is why I added an hidden input control to store the file name. This hidden input is populated with the name of the file when jQuery completes the ajax request.

Now let’s create the code for the file “upload.js”:

/*
* https://www.thedummyprogrammer.com
*/

$(document).ready(function() {
  $('#btnUpload').click(function() {
    var fileUpload = document.getElementById('fileUpload');
    var formData = new FormData();

    if (fileUpload.files.length == 0) {
      alert('Select a file!');
      return;
    }

    formData.append("fileUpload", fileUpload.files[0], fileUpload.files[0].name);

    $.ajax({
      url: 'uploadhandler.php',
      type: 'POST',
      data: formData,
      processData: false,
      contentType: false,

      success: function(data, textStatus, jqXHR) {
        fileUpload.value = null;

        $('#imgPreview').attr('src', '/testupload/uploadedfiles/' + data.fileId);
        $('#hidFileId').val(data.fileId); 
      },
      error: function(jqXHR, textStatus, errorThrown) {
        alert('An error occurred uploading the file!');
      }
    });
  });
});

In the script above an event handler is attached to the click event of button “btnUpload”. An object of type “FormData” is instantiated and the file selected by the user is added to the collection of the object formData.

Then the file is submitted to the server using an ajax call made with jQuery.

The name of the file returned by the ajax request is used to set the “src” attribute of the image to show the preview.

Note the url parameter of the ajax request: it refers to “uploadhandler.php”. This is the last file we need to complete the job, and it is described below:

<?php
/*
* https://www.thedummyprogrammer.com
*/

$result = null;

try
{
  $fileId = uniqid() . "-" . $_FILES["fileUpload"]["name"];
  move_uploaded_file($_FILES['fileUpload']['tmp_name'], __DIR__ . "/uploadedfiles/" . $fileId); 
  $result = array('status' => 'ok', 'fileId' => $fileId); 
}
catch (Exception $ex)
{
  $result = array('status' => 'error', 'fileId' => null); 
}

header('Content-Type: application/json');
echo json_encode($result);

That’s it, you now have an ajax upload.

There are more things to care about: for example security or the possibility to remove an uploaded file or upload multiple files.

But for now let’s finish here… 😉

Click to download the code.

AJAX, PHP

Post navigation

Previous Post: Configuring an SFTP server on Windows Server
Next Post: Searching files and file content in Windows

Related Posts

Configure a PHP development environment in Windows (part 2 of 4) PHP
Configure a PHP development environment in Windows (part 4 of 4) MySql
Configure a PHP development environment in Windows (part 3 of 4) PHP
Configure a PHP development environment in Windows (part 1 of 4) PHP
FuelPHP & PHP installation issues FuelPHP

Search

Related posts

  • FuelPHP & PHP installation issues
  • Install Imagick extension for PHP on Linux CentOS 7
  • Configure a PHP development environment in Windows…
  • Configure a PHP development environment in Windows…

Categories

  • .NET 6 (1)
  • .NET 7 (1)
  • AJAX (1)
  • Android (2)
  • Apache (4)
  • ASP.NET (9)
  • ASP.NET MVC (3)
  • Avalonia UI (1)
  • BCP (1)
  • Bitlocker (2)
  • C# (14)
  • CentOS (4)
  • ClosedXML (1)
  • CLR (1)
  • DNS (1)
  • Encryption (3)
  • Excel (2)
  • FuelPHP (3)
  • Games (2)
  • Google Chrome (1)
  • GSuite (1)
  • HTML (1)
  • Imagick (2)
  • Javascript (1)
  • Kindle (1)
  • LAMP (3)
  • Linux (7)
  • MariaDB (2)
  • Mathematics (2)
  • MySql (4)
  • NPOI (1)
  • Office 365 (1)
  • Perl (1)
  • PHP (6)
  • Programming (1)
  • Remote desktop (1)
  • SFTP (2)
  • Sockets (3)
  • Sql Server (20)
  • Sql Server 2016 (14)
  • Sql Server 2019 (1)
  • SSL (4)
  • Task scheduler (1)
  • Telerik ASP.NET AJAX (2)
  • The Dummy Programmer Chat (2)
  • Threading (5)
  • Tools (1)
  • TPL (3)
  • TypeScript (3)
  • Ubuntu (4)
  • Virtualization software (3)
  • Visual Studio (1)
  • Visual Studio Code (2)
  • VueJS (1)
  • Web fonts (1)
  • Web programming (6)
  • Windows (12)
  • Windows 10 (15)
  • Windows Forms (1)
  • Windows Server (6)

Copyright © 2024 The Dummy Programmer | Privacy Policy | Terms of use |

Powered by PressBook Masonry Dark

Manage Cookie Consent
This site doesn’t collect user personal data and doesn’t install profiling or analytical cookies, either its own or from third parties. Read our privacy policy for more info.
Functional Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
Manage options Manage services Manage {vendor_count} vendors Read more about these purposes
View preferences
{title} {title} {title}