jQuery AJAX file upload PHP

前端 未结 6 770
小鲜肉
小鲜肉 2020-11-21 05:15

I want to implement a simple file upload in my intranet-page, with the smallest setup possible.

This is my HTML part:



        
相关标签:
6条回答
  • 2020-11-21 05:46

    Best File Upload Using Jquery Ajax With Materialise Click Here to Download

    When you select image the image will be Converted in base 64 and you can store this in to database so it will be light weight also.

    0 讨论(0)
  • 2020-11-21 06:02

    You need a script that runs on the server to move the file to the uploads directory. The jQuery ajax method (running in the browser) sends the form data to the server, then a script on the server handles the upload. Here's an example using PHP.

    Your HTML is fine, but update your JS jQuery script to look like this:

    $('#upload').on('click', function() {
        var file_data = $('#sortpicture').prop('files')[0];   
        var form_data = new FormData();                  
        form_data.append('file', file_data);
        alert(form_data);                             
        $.ajax({
            url: 'upload.php', // point to server-side PHP script 
            dataType: 'text',  // what to expect back from the PHP script, if anything
            cache: false,
            contentType: false,
            processData: false,
            data: form_data,                         
            type: 'post',
            success: function(php_script_response){
                alert(php_script_response); // display response from the PHP script, if any
            }
         });
    });
    

    And now for the server-side script, using PHP in this case.

    upload.php: a PHP script that runs on the server and directs the file to the uploads directory:

    <?php
    
        if ( 0 < $_FILES['file']['error'] ) {
            echo 'Error: ' . $_FILES['file']['error'] . '<br>';
        }
        else {
            move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name']);
        }
    
    ?>
    

    Also, a couple things about the destination directory:

    1. Make sure you have the correct server path, i.e., starting at the PHP script location what is the path to the uploads directory, and
    2. Make sure it's writeable.

    And a little bit about the PHP function move_uploaded_file, used in the upload.php script:

    move_uploaded_file(
    
        // this is where the file is temporarily stored on the server when uploaded
        // do not change this
        $_FILES['file']['tmp_name'],
    
        // this is where you want to put the file and what you want to name it
        // in this case we are putting in a directory called "uploads"
        // and giving it the original filename
        'uploads/' . $_FILES['file']['name']
    );
    

    $_FILES['file']['name'] is the name of the file as it is uploaded. You don't have to use that. You can give the file any name (server filesystem compatible) you want:

    move_uploaded_file(
        $_FILES['file']['tmp_name'],
        'uploads/my_new_filename.whatever'
    );
    

    And finally, be aware of your PHP upload_max_filesize AND post_max_size configuration values, and be sure your test files do not exceed either. Here's some help how you check PHP configuration and how you set max filesize and post settings.

    0 讨论(0)
  • 2020-11-21 06:03
    var formData = new FormData($("#YOUR_FORM_ID")[0]);
    $.ajax({
        url: "upload.php",
        type: "POST",
        data : formData,
        processData: false,
        contentType: false,
        beforeSend: function() {
    
        },
        success: function(data){
    
    
    
    
        },
        error: function(xhr, ajaxOptions, thrownError) {
           console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
        }
    });
    
    0 讨论(0)
  • 2020-11-21 06:03

    and this is the php file to receive the uplaoded files

    <?
    $data = array();
        //check with your logic
        if (isset($_FILES)) {
            $error = false;
            $files = array();
    
            $uploaddir = $target_dir;
            foreach ($_FILES as $file) {
                if (move_uploaded_file($file['tmp_name'], $uploaddir . basename( $file['name']))) {
                    $files[] = $uploaddir . $file['name'];
                } else {
                    $error = true;
                }
            }
            $data = ($error) ? array('error' => 'There was an error uploading your files') : array('files' => $files);
        } else {
            $data = array('success' => 'NO FILES ARE SENT','formData' => $_REQUEST);
        }
    
        echo json_encode($data);
    ?>
    
    0 讨论(0)
  • 2020-11-21 06:07
    **1. index.php**
    <body>
        <span id="msg" style="color:red"></span><br/>
        <input type="file" id="photo"><br/>
      <script type="text/javascript" src="jquery-3.2.1.min.js"></script>
      <script type="text/javascript">
        $(document).ready(function(){
          $(document).on('change','#photo',function(){
            var property = document.getElementById('photo').files[0];
            var image_name = property.name;
            var image_extension = image_name.split('.').pop().toLowerCase();
    
            if(jQuery.inArray(image_extension,['gif','jpg','jpeg','']) == -1){
              alert("Invalid image file");
            }
    
            var form_data = new FormData();
            form_data.append("file",property);
            $.ajax({
              url:'upload.php',
              method:'POST',
              data:form_data,
              contentType:false,
              cache:false,
              processData:false,
              beforeSend:function(){
                $('#msg').html('Loading......');
              },
              success:function(data){
                console.log(data);
                $('#msg').html(data);
              }
            });
          });
        });
      </script>
    </body>
    
    **2.upload.php**
    <?php
    if($_FILES['file']['name'] != ''){
        $test = explode('.', $_FILES['file']['name']);
        $extension = end($test);    
        $name = rand(100,999).'.'.$extension;
    
        $location = 'uploads/'.$name;
        move_uploaded_file($_FILES['file']['tmp_name'], $location);
    
        echo '<img src="'.$location.'" height="100" width="100" />';
    }
    
    0 讨论(0)
  • 2020-11-21 06:08

    Use pure js

    async function saveFile() 
    {
        let formData = new FormData();           
        formData.append("file", sortpicture.files[0]);
        await fetch('/uploads', {method: "POST", body: formData});    
        alert('works');
    }
    <input id="sortpicture" type="file" name="sortpic" />
    <button id="upload" onclick="saveFile()">Upload</button>
    <br>Before click upload look on chrome>console>network (in this snipped we will see 404)

    The filename is automatically included to request and server can read it, the 'content-type' is automatically set to 'multipart/form-data'. Here is more developed example with error handling and additional json sending

    async function saveFile(inp) 
    {
        let user = { name:'john', age:34 };
        let formData = new FormData();
        let photo = inp.files[0];      
             
        formData.append("photo", photo);
        formData.append("user", JSON.stringify(user));  
        
        try {
           let r = await fetch('/upload/image', {method: "POST", body: formData}); 
           console.log('HTTP response code:',r.status); 
           alert('success');
        } catch(e) {
           console.log('Huston we have problem...:', e);
        }
        
    }
    <input type="file" onchange="saveFile(this)" >
    <br><br>
    Before selecting the file Open chrome console > network tab to see the request details.
    <br><br>
    <small>Because in this example we send request to https://stacksnippets.net/upload/image the response code will be 404 ofcourse...</small>

    0 讨论(0)
提交回复
热议问题