Несколько загрузок файлов с использованием javascript-php (без jQuery) AJAX [дубликат]

Относительно использования reduce() с lambda. Вот рабочий код, который, как мне кажется, лучше, чем некоторые другие ответы.

reduce(lambda x, y: (x[1]==y, y), [2, 2, 2], (True, 2))

Возвращает кортеж, где первое значение является логическим, если все элементы одинаковы или нет.

26
задан Alexis Pigeon 21 October 2012 в 19:42
поделиться

3 ответа

Способ работы с javascript:

var data = new FormData();

$.each($("input[type='file']")[0].files, function(i, file) {
    data.append('file', file);
});

$.ajax({
    type: 'POST',
    url: '/your/url',
    cache: false,
    contentType: false,
    processData: false,
    data : data,
    success: function(result){
        console.log(result);
    },
    error: function(err){
        console.log(err);
    }
})

Если вы вызываете data.append («файл», файл) несколько раз, ваш запрос будет содержать массив ваших файлов.

Используя с помощью node.js и multipart handler middleware multer, вы получите следующие данные:

router.post('/trip/save', upload.array('file', 10), function(req, res){
    // Your array of files is in req.files
}
27
ответ дан Flaudre 17 August 2018 в 16:23
поделиться
  • 1
    ...If you call data.append('file', file) multiple times your request will contain an array of your files... Сохранял мне часы отчаяния, тем более, что я чувствовал, что имя должно быть file[], но используя только file и вызывая многократные отработки, спасибо! – bourgeois247 16 July 2017 в 18:42
  • 2
    Чувак, которого вы легенда, искал это с утра. – Kannan 8 October 2017 в 17:04
  • 3
    Я попробовал вам пример, но когда я var_dumped, он всегда возвращает последний образ набора. Я изменил: data.append('file', file) до data.append('file', i), который работал для меня. – Jeroen Bellemans 23 October 2017 в 09:10
  • 4
    и ты официально мой герой – WtFudgE 14 June 2018 в 01:19

Вам просто нужно использовать fileToUpload[] вместо fileToUpload:

fd.append("fileToUpload[]", document.getElementById('fileToUpload').files[0]);

И он вернет массив с несколькими именами, размерами и т. д. ...

15
ответ дан kamal pal 17 August 2018 в 16:23
поделиться
  • 1
    Это должен быть цикл и добавить каждый files[i] – FindOutIslamNow 5 July 2018 в 06:11

Вы должны получить длину файла для добавления в JS, а затем отправить его по запросу AJAX, как показано ниже

//JavaScript 
var ins = document.getElementById('fileToUpload').files.length;
for (var x = 0; x < ins; x++) {
    fd.append("fileToUpload[]", document.getElementById('fileToUpload').files[x]);
}

//PHP
$count = count($_FILES['fileToUpload']['name']);
for ($i = 0; $i < $count; $i++) {
    echo 'Name: '.$_FILES['fileToUpload']['name'][$i].'<br/>';
}
46
ответ дан T30 17 August 2018 в 16:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: