Передача файлов по ajax - jQuery
Друзья, как правильно обрабатывать массив файлов при передаче и сохранить структуру?
При попытке передать массив файлов он разбивает неверно, кто-то может пояснить тупому, почему так происходит как решить?:help:
Array
(
[file] => Array
(
[name] => Array
(
[0] => 1402236_566802636708984_1354256864_o.jpg
[1] => 287481_456592524374335_1348353782_o.jpg
)
[type] => Array
(
[0] => image/jpeg
[1] => image/jpeg
)
[tmp_name] => Array
(
[0] => C:\wamp\tmp\php5A1E.tmp
[1] => C:\wamp\tmp\php5A21.tmp
)
[error] => Array
(
[0] => 0
[1] => 0
)
[size] => Array
(
[0] => 217360
[1] => 144071
)
)
)
|
Цитата:
|
Хм, логичнее что он должен иметь такой вид
Array
(
[file] => Array
(
[0] => Array
(
[name] => 1402236_566802636708984_1354256864_o.jpg
[type] => image/jpeg
[tmp_name] => C:\wamp\tmp\php35C1.tmp
[error] => 0
[size] => 217360
)
[1] => Array
(
[name] => 964570_566803006708947_840223346_o.jpg
[type] => image/jpeg
[tmp_name] => C:\wamp\tmp\php35C4.tmp
[error] => 0
[size] => 518594
)
)
)
|
Цитата:
<form id="testForm" method="post" class="form-horizontal"> <input type="text" name="laod[]"><br> <input type="file" name="files[]" multiple /> <br> <input type="file" name="files[]" multiple /><br> <input type="file" name="file"> <br> <input type="button" name="save" value="save" onclick="sendRequestFormAjax(this,event);"> </form>
formData = new FormData();
$.each(form.find("input[type=file]"), function(i, iFiles) {
var name = $(iFiles).attr("name");
formData.append(name, iFiles.files[0]);
});
|
Так не получится, вам доступно управлять только индексами полей, а не ключами name, type... Да и не нужно этого, какие проблемы?
|
Если поле multiple зачем же их два?
|
Цитата:
Цитата:
|
Цитата:
|
Ajax передаст такой массив $_FILES, который еще надо разобрать, что бы привести к нормальному виду.
Array
(
[files] => Array
(
[name] => Array
(
[0] => 1402236_566802636708984_1354256864_o.jpg
[1] => 287481_456592524374335_1348353782_o.jpg
)
[type] => Array
(
[0] => image/jpeg
[1] => image/jpeg
)
[tmp_name] => Array
(
[0] => C:\wamp\tmp\php5A1E.tmp
[1] => C:\wamp\tmp\php5A21.tmp
)
[error] => Array
(
[0] => 0
[1] => 0
)
[size] => Array
(
[0] => 217360
[1] => 144071
)
)
)
|
Цитата:
|
Тем что я не могу сделать просто
foreach($_FILES['files']){ получить массив описания конкретного файла и сохранить. } |
Цитата:
Вопрос - если проходом в цикле "ненормальной структуры" можно создать "нормальную структуру", а значит иметь доступ ко всем элементам массива, то нахрена же создавать массив-посредник? |
laimas, я в принципе не спрашивал, как мне обработать массив "ненормальной" структуры, такое решение есть и оно работает. Меня сугубо интересовало ,как подготовить сразу нормальный массив т.к. я столкнулся с этим в очередной раз и решил спросить у профи, решения нет я так понимаю?
|
Цитата:
Загрузка файлов на сервер всегда должна начинаться с проверки загрузки файлов именно методом POST, а не загрузка "левых файлов", и отсутствия ошибок в ключе error. Для проверки ошибок загрузки достаточно использовать стандартные функции для работы с массивами, которых даже больше чем надо, и гонять массив в цикле не потребуется. А если ошибок нет, совсем не сложно обойти циклом только массив ключа tmp_name, так как это и есть файлы, все остальное можно получить из исходного массива по ключу. Зачем создавать какой-то промежуточный массив? Ну если так охота, партесь, создавайте, никто же не запрещает. :) |
Да, спасибо . Не вижу смысла разводить полемику , разве ради холиварта )) это все понятно, просто мне было бы так удобнее обрабатывать данные, если у кого то будет решение, буду благодарен )
|
| Часовой пояс GMT +3, время: 02:34. |