Click here to Skip to main content
15,888,106 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I am trying out Jquery File Upload
<input type="file" name="listingfiles[]" class="file" multiple>


This upload option give many file upload option . But i want to make it only 3 to upload multiple .How i set to limit (only 3 file ) the maximum files using PHP, jQuery and AJAX. I have use 4 file

What I have tried:

HTML FILE

<div class="filediv">
       <input type="file" name="listingfiles[]" class="file" multiple min="1" max="3">
    </div>


JAVA CODE
if (jQuery("input[name='listingfiles[]']").length){
        var lpcount = 0;
        jQuery.each(jQuery("input[name='listingfiles[]']"), function(k, files) {
            jQuery.each(jQuery("input[name='listingfiles[]']")[k].files, function(i, file) {
                if(file.size > 1 || file.fileSize > 1) {
                    fd.append('listingfiles[' + lpcount + ']', file);
                    lpcount++;
                }
            });
        });
    }



AJAX CODE

jQuery(document).ready(function($){

'use-strict';

var abc = 1;      // Declaring and defining global increment variable.
$(document).ready(function() {
    if(jQuery('.lp-img-gall-upload-section').length > 0){

        $('body').on('change', '.file', function(event) {
            var files = event.target.files; //FileList object
            var output = document.getElementsByClassName("filediv");
            output = output[0];

            for(var i = 0; i< files.length; i++)
            {
                var file = files[i];
                //Only pics
                if(!file.type.match('image'))
                    continue;

                var picReader = new FileReader();

                picReader.addEventListener("load",function(event){

                    var picFile = event.target;

                    var div = document.createElement("ul");
                    div.className = 'jFiler-items-list jFiler-items-grid grid'+i;
                    div.innerHTML = '<li class="jFiler-item">\
                                    <div class="jFiler-item-container">\
                                        <div class="jFiler-item-inner">\
                                            <div class="jFiler-item-thumb">\
                                                 <img  class="thumbnail" src="'+ picFile.result +'" title="' + picFile.name + '"/>\
                                            </div>\
                                        </div>\
                                    </div><a class="icon-jfi-trash jFiler-item-trash-action"></a>\
                                </li>';

                    output.insertBefore(div,null);
                });
                //Read the image
                picReader.readAsDataURL(file);
            }
            $('.jFiler-item-trash-action').on('click',function() {
                $(this).parent().parent().parent().remove();
            });
            $(output).find('input').hide();
            $(output).before($("<div/>", {
                class: 'filediv'
            }).fadeIn('slow').append($("<input/>", {
                name: 'listingfiles[]',
                type: 'file',
                class: 'file',
                multiple: 'multiple'
            })));
        });
        // To Preview Image
        function imageIsLoaded(e) {
            $('#previewimg' + abc).attr('src', e.target.result);
        };
    }
});
});


PHP CODE

if ( isset($_FILES["listingfiles"]) ) {
    if($_FILES['listingfiles']['size'] != 0) {
        $files = $_FILES["listingfiles"];           
        //$files2 = $_FILES["lp-featuredimage"];            
        foreach ($files['name'] as $key => $value) {                            
            if ($files['name'][$key]) {
                $file = array( 'name' => $files['name'][$key],                      
                'type' => $files['type'][$key],                         
                'tmp_name' => $files['tmp_name'][$key],                         
                'error' => $files['error'][$key],                       
                'size' => $files['size'][$key] );                   
                $_FILES = array ("listingfiles" => $file);                  
                $count = 0;                 
                foreach ($_FILES as $file => $array) {  

                    if( $featImgFromGal==true && !isset($_FILES["lp-featuredimage"]) ){
                        $newupload = listingpro_handle_attachment($file,$postID,$set_thu=true);
                    }else{
                        $newupload = listingpro_handle_attachment($file,$postID,$set_thu=false);
                    }                                                       
                    $ids[] =$newupload;
                    $count++;
                }
            }
        }
        if(!empty($ids) && is_array($ids)){
            $img_ids = implode(",", $ids);              
            update_post_meta($postID, 'gallery_image_ids', $img_ids);
            //$_FILES['lp-featuredimage'] = $files2;

        }
    }                                   
}



Any suggestions on how I set the limit , 3 file only?
Posted
Updated 23-Nov-18 3:54am

1 solution

Edit File :

PHP
<pre> 

if($abirfileSwitch == 1){ 
 if($abirgallery_show=="true"){ 
  $output .='
   <div class="form-group clearfix margin-bottom-0 lp-img-gall-upload-section">
    <div class="col-sm-12 padding-left-0 padding-right-0">
        <label for="postVideo">'.esc_html__('Images ', 'listingpro-plugin').'</label>
        <div class="jFiler-input-dragDrop pos-relative">
            <div class="jFiler-input-inner">
                <div class="jFiler-input-icon">
                    
                </div>
                <div class="jFiler-input-text">
                    <h3 style="margin:20px 0px;">'.$upload_icon.''.esc_html__('Drop max 3 files here or click to upload', 'listingpro-plugin').'</h3>

                </div>
                <a class="jFiler-input-choose-btn blue">
                  '.esc_html__('Browse Files', 'listingpro-plugin').'</a>
                <div class="filediv">
                    <input type="file" name="abirlistingfiles[]" class="file" multiple>
                </div>'; 

$galleryImagesIDS = explode( ',', $galleryImagesIDS ); if(!empty($galleryImagesIDS)){ 
  foreach($galleryImagesIDS as $galID){ 
   $imgFull = wp_get_attachment_image_src( $galID, 'thumbnail');      
    if(!empty($imgFull[0])){ 
    $output.= '<div class="filediv">
                    <ul class="jFiler-items-list jFiler-items-grid grid1">
                        <li class="jFiler-item">
                            <div class="jFiler-item-container">
                                <div class="jFiler-item-inner">
                                    <div class="jFiler-item-thumb">
                                        <img src="'. $imgFull[0] .'" alt="post1" />
                                    </div>
                                </div>
                            </div>
                            <a class="icon-jfi-trash jFiler-item-trash-action">
                           </a>
                            <input name="abirlistingfiles[]" calss="file"   multiple="multiple" value="'.$galID.'" type="hidden">
                        </li>
                    </ul>
                </div>'; 
} 
} 
} 
$output .= '
            </div>
        </div>
    </div>
</div>'; 
} 
}
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900