jQuary aszinkron feltölteni, de párosítani két fájlt egy feltöltés

szavazat
0

Van egy file feltöltés formában lehetővé teszi a választást a sok fájl (csak .xml és .yml fájlok) a feltölteni kívánt. A forma jön létre blueimp a jQuery fájl feltöltése . Régebben az Információt ez a kérdés , hogy minden működik.

Az .xml és .yml fájlok mindig párban járnak, és különböző információkat tartalmazna egy adatblokk. A feltöltött fájlokat kezeli külön .php fájlt. Ott ellenőrizze, hogy a megfelelő fájl már feltöltötték. Ha ez a helyzet elkezd egy folyamatot kezelni mindkét fájlt.

Tökéletesen működik, a legtöbb esetben, de néha kapok vezetékes visszatérő üzenetek és úgy néz ki, hogy el lehet kezdeni a feldolgozási folyamat és kódot kétszer. Saját gyanú, hogy a megfelelő fájl csak feltöltése befejeződött, mielőtt az első fájl ellenőrzött amennyiben mindkettő. Ezután az első fájlt elindítja a folyamatot, és a második lefut azt is.

function process_uploaded_data(&$response, $file_path) {
    $file_name = get_file_name($file_path);
    $yml_path = 'tmp/'. $file_name .'.yml';
    $xml_path = 'tmp/'. $file_name .'.xml';

    if(file_exists($xml_path) && file_exists($yml_path))
    {
        // parse and process yml and xml
    }
}

// A list of permitted file extensions
$allowed = array('xml', 'yml');

if(isset($_FILES['upl']) && 0 >= $_FILES['upl']['error']){

    $extension = pathinfo($_FILES['upl']['name'], PATHINFO_EXTENSION);

    if(!in_array(strtolower($extension), $allowed)) {
        $response['file'] = $_FILES['upl']['name'];
        $response['status'] = 'failed';
        echo json_encode($response);
        exit;
    }

    if(move_uploaded_file($_FILES['upl']['tmp_name'], 'tmp/'.$_FILES['upl']['name'])){
        $response['file'] = $_FILES['upl']['name'];
        $response['status'] = 'success';

        process_uploaded_data($response, 'tmp/'.$_FILES['upl']['name']);

        echo json_encode($response);
        exit;
    }
}

echo '{status:error}';
exit;

Ennek kiküszöböléséhez szeretnék párosítani a két fájlt a kliens oldali és feltölteni mindkét fájlt egyszerre. Ahhoz, hogy átírta a szerverek PHP script, mint ez nem probléma, de hogyan tudom ellenőrizni és a csoport a fájlok JS?

Nyilvánvaló, hogy van, hogy késleltesse var jqXHR = data.submit();az add: function. De van egy pár kérdés:

  1. Hol és hogyan érhetem el a teljes listát a kiválasztott fájlokat?

  2. Amikor már párosítva a megfelelő fájlokat, hogyan lehet kiváltani a két fájlt feltölteni?

Itt van egy kisebb változata feltöltési formában:

<!DOCTYPE html>
<html>
<head>
    <script src=javascripts/modernizr.js></script>
    <script src=javascripts/respond.min.js></script>
    <script src=javascripts/prefixfree.min.js></script>
    <script src=javascripts/jquery-3.4.1.min.js></script>

    <script src=javascripts/vendor/jquery.ui.widget.js></script>
    <script src=javascripts/jquery.iframe-transport.js></script>
    <script src=javascripts/jquery.fileupload.js></script>

    <script>
        $(function() {
            var ul = $('#upload ul');

            $('#upload').fileupload({
                url: 'sql_upload.php',
                dataType: 'text',
                type: 'post',

                // This function is called when a file is added to the queue
                add: function (e, data) {                   
                    //This area will contain file list and progress information.
                    var tpl = $('<li><p class=file_name></p></li>');

                    // Append the file name and file size
                    tpl.find('p').text(data.files[0].name);

                    // Add the HTML to the UL element
                    data.context = tpl.appendTo(ul);

                    // Automatically upload the file once it is added to the queue
                    var jqXHR = data.submit();
                },
                success: function(php_script_response){
                    console.log(php_script_response);
                }
            });
        })
    </script>
</head>
<body>
    <form id=upload enctype=multipart/form-data>
        <input type=file name=upl multiple />
        <ul id=fileList>
            <!-- The file list will be shown here -->
        </ul>
    </form>
</body>
</html>
A kérdést 24/10/2019 12:53
a forrás felhasználó
Más nyelveken...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more