Относительно использования reduce()
с lambda
. Вот рабочий код, который, как мне кажется, лучше, чем некоторые другие ответы.
reduce(lambda x, y: (x[1]==y, y), [2, 2, 2], (True, 2))
Возвращает кортеж, где первое значение является логическим, если все элементы одинаковы или нет.
Способ работы с 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
}
Вам просто нужно использовать fileToUpload[]
вместо fileToUpload
:
fd.append("fileToUpload[]", document.getElementById('fileToUpload').files[0]);
И он вернет массив с несколькими именами, размерами и т. д. ...
Вы должны получить длину файла для добавления в 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/>';
}
...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:42data.append('file', file)
доdata.append('file', i)
, который работал для меня. – Jeroen Bellemans 23 October 2017 в 09:10