Jak przesłać wiele plików za pomocą jednego elementu wejściowego pliku

Próbuję użyć jednego elementu wejściowego pliku, aby przesłać wiele plików na dysk za pomocą formularza html. Wydaje się, że działa to tylko dla jednego pliku, chociaż selektor plików umożliwia wybranie wielu plików. W przeglądarce dziennika skryptów widzę tylko jeden plik przechwycony z dwóch przesłanych przeze mnie plików. To nieobsługiwane, czy źle to robię?

Code.gs:

function logForm(form) {
  Logger.log(JSON.stringify(form));
  return true;
}

Indeks.html:

<html>
  <form id="uploadTest" enctype="multipart/form-data">
    <input type="file" multiple="multiple" name="fileUpload">
    <input type="button" id="upload" value="upload"
    onclick="google.script.run.logForm(document.getElementById('uploadTest'));">
  </form>
</html>

Log view:

{"fileUpload":{"contents":"GIF87a\u0001\u0000\u0001\u0000�
\u0000\u0000��̖��,\u0000\u0000\u0000\u0000\u0001\u0000
\u0001\u0000\u0000\u0002\u0002D\u0001\u0000;",
"type":"image/gif","name":"1x1.gif","length":35}}
Author: Danny Beckett, 2013-03-31

3 answers

Wybór wielu plików w oknie dialogowym po kliknięciu przycisku Przeglądaj w polu Plik odbywa się tylko dla nowych przeglądarek obsługujących HTML5. To nie pozwoli wiele select dla starych przeglądarek. Dla starszych przeglądarek jedynymi dobrymi rozwiązaniami są wtyczki flash lub javascript. Oto dobry zasób dla uploaderów jquery (niektóre obsługują wiele plików): http://creativefan.com/10-ajax-jquery-file-uploaders / . stąd moja sugestia jest użycie jakiegoś pluginu tak, że jego obsługiwane na starych oraz nowe przeglądarki.

 8
Author: Ujwal Abhishek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-14 06:41:29

Używam możliwości wysłania tablicy plików. Wystarczy dodać [] do nazwy atrribute:

<form action="/" enctype="multipart/form-data" method="post">
    <input type="file" name="files[]" />
    <input type="file" name="files[]" />
    // etc.
    <input type="submit">
</form>

Będziesz miał tablicę tablic w $_FILES

Array
(
    [files] => Array
        (
            [name] => Array
                (
                    [0] => 1.png
                    [1] => 2.png
                )

            [type] => Array
                (
                    [0] => image/png
                    [1] => image/png
                )

            [tmp_name] => Array
                (
                    [0] => /tmp/phpDQOZWD
                    [1] => /tmp/phpCELeSw
                )

            [error] => Array
                (
                    [0] => 0
                    [1] => 0
                )

            [size] => Array
                (
                    [0] => 32209
                    [1] => 64109
                )

        )

)

Oczywiście, będziesz musiał przesłać je jeden po drugim. Nie jest wygodne dla dużej liczby plików, ale działa we wszystkich przeglądarkach. Na przykład,używając jQuery możesz dodać jeszcze jedno wejście za każdym razem, gdy ostatnio files[] zostało zmienione.

function addOneMoreInput() {
    $('input[type=file]').last().change(function() {
        $(this).after('<input type="file" name="files[]" />');
        $(this).off('change');
        addOneMoreInput();
    });
}
addOneMoreInput();
 5
Author: vladkras,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-26 07:13:44

Możesz użyć HTML5 form-data & upload-multiple , proszę sprawdzić ten link: https://stackoverflow.com/a/20628748/1530842

 3
Author: Harry S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:46:58