Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/32: Рейтинг темы: голосов - 32, средняя оценка - 4.63
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522

Загрузка файлов ч/з ajax и отмена

24.01.2013, 00:44. Показов 6552. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет!
Хочу сделать загрузку файлов ч/з аякс как на Яндекс.почте например. Мне не понятен такой момент,
вот я загрузил пару файлов и передумал добавлять материал. Куда деваются при этом уже загруженные фотки и куда они вабще загружаются? Они временные файлы и уже на сервере?
Кто решал эту задачу можете дать готовое решение, задачу нужно быстро решить
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.01.2013, 00:44
Ответы с готовыми решениями:

AJAX загрузка файлов.
Как сделать загрузку файла на jQuery без дополнительных плагинов (one click, ajaxForm и т.п.) и еще обязательно без iframe (target). ...

Загрузка файлов и Ajax
Здравствуйте, я понимаю что задача весьма тривиальная, но бьюсь уже два дня, никак не могу допереть. Суть вот в чем: с вьюшки...

VBulletin AJAX загрузка файлов
Добрый день! Делаю Drag&Drop загрузчик вложений взамен стандартного который в расширенном варианте ответа. Движок vBulletin 4. ...

34
60 / 57 / 22
Регистрация: 15.12.2009
Сообщений: 231
Записей в блоге: 1
27.02.2013, 09:00
Студворк — интернет-сервис помощи студентам
http://blueimp.github.com/jQuery-File-Upload/ пробовали? Там и прогресс бары, и практически всё что надо, для комфортной работы.
А так конечно, любой загрузчик надо допиливать под конкретную задачу.
0
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
27.02.2013, 11:06
Цитата Сообщение от Donald28 Посмотреть сообщение
Нельзя загружать файлы на сервер по средствам AJAX.
Нельзя глупости говорить.
А файлы загружать по AJAX можно, только это не будет работать в старых IE.
Поэтому загружаю файлы через фрейм.
0
 Аватар для stashappy
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
27.02.2013, 12:47
Помнится люди делали прогресс на основе сессий:
http://www.asf.ru/docs/php/ses... gress.html

Добавлено через 29 минут
Нельзя глупости говорить.
А файлы загружать по AJAX можно
Да нет. Реально нельзя через ajax передать файл. Я тоже пытался. Пробовал даже дополнительные плагины на jquery скачивать. Но и они основаны на iframe.

Добавлено через 7 минут
я сам лопатил инет в поисках этого ответа нашел более приемлемый вариант тут: saintist.ru/2009/08/14/jquery-ajax-upload-file/
Этот плагин, который вы предоставили, я тоже разбирал. Он тоже работает на основе iframe. При клике, он вставляет в тело страницы, ифрейм и загружает в него обработчик, только и всего. По моему, использование подобных плагинов, означает - идти более сложным путем.
0
странник
 Аватар для Donald28
810 / 481 / 108
Регистрация: 28.05.2012
Сообщений: 1,518
Записей в блоге: 2
27.02.2013, 13:14
stashappy, можно. Только это уже HTML5. И как правильно отметил OnYourLips, данный способ не во всех браузерах поддерживается. http://www.html5rocks.com/ru/t... /dndfiles/
1
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
27.02.2013, 13:21
Цитата Сообщение от stashappy Посмотреть сообщение
Да нет. Реально нельзя через ajax передать файл. Я тоже пытался.
Давай лучше скажем, что не нельзя, а просто ты не смог решить такую простую задачу.

http://dev.w3.org/2006/webapi/FileAPI/
1
 Аватар для stashappy
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
27.02.2013, 13:31
Там все не на "нашем" языке. Вникать не стал.

Только это уже HTML5.
Да. Но как-же те пользователи, у которых стоят старые версии браузеров? Их мы сбрасываем со счетов?
0
странник
 Аватар для Donald28
810 / 481 / 108
Регистрация: 28.05.2012
Сообщений: 1,518
Записей в блоге: 2
27.02.2013, 13:42
Еще на днях видел статью вроде на хабре, там про AJAX2. Но к сожалению адрес не сохранился.

Ну так мы говорим не о всех пользователях. а о том, что можно через AJAX загружать на сервер.
1
 Аватар для stashappy
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
27.02.2013, 13:47
Ну так мы говорим не о всех пользователях. а о том, что можно через AJAX загружать на сервер.
Но ведь автору, если я правильно понимаю, главное, чтобы страница не перезагружалась. А это можно очень просто сделать с помощью iframe. Пример я уже выложил.
0
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
27.02.2013, 14:02
Цитата Сообщение от stashappy Посмотреть сообщение
Там все не на "нашем" языке. Вникать не стал.
Стоит выучить до уровня свободного чтения.

Цитата Сообщение от stashappy Посмотреть сообщение
Да. Но как-же те пользователи, у которых стоят старые версии браузеров? Их мы сбрасываем со счетов?
Я написал, что не будет работать в старых IE.
1
 Аватар для stashappy
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
27.02.2013, 14:26
Для автора сделал простой пример загрузки, без перезагрузки страницы, без использования ajax, для всех браузеров. Если что, по желанию можно добавить дополнительные функции проверки типа файла, размера файла, ошибки итд.
Вложения
Тип файла: zip upload_page.zip (2.8 Кб, 33 просмотров)
0
 Аватар для stashappy
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
27.02.2013, 14:46
без использования ajax
То есть, имелось ввиду без jquery.
0
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
27.02.2013, 17:18  [ТС]
chesar, скрипт хороший, но сам по себе. Вы пробовали его прикрутить к сайту, это Ж.
5-6 css-файлов (которые кстати подгружаются с какого-то сайта) + 7-8 js-файлов... у меня на сайте стока нет, а тут тока один скрипт )) Есть вроде укороченная версия, которая ничего не делает.

Добавлено через 9 минут
ребята, решил пока остановиться на swf-upload'ере (флеш конечно, ну.. что делать).
Такой момент, сначала я загружаю файлы в отдельную папку upload/, чтобы не фотки не путались каждая группа фоток сохраняется в 'upload/'.uniqid('').'/'. После того как чек загрузил фотки и заполнил всю остальную форму (форма в целом отправляется на чистом php с перезагрузкой) и отправил, нужно фотки из временной директории куда я их сохранял переместить в другую папку..
Это делается если вдруг чек передумал отправлять форму (но фотки уже успел загрузить) и ненужные фотки безхозно не валялись на сервере. Папка upload/ каждый день чистит cron
1. Как переместить папку с файлами в другую папку
2. Долго ли эта процедура будет длиться, точнее также долго как загрузка?
0
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
27.02.2013, 17:43
Цитата Сообщение от Love_and_Peace Посмотреть сообщение
ребята, решил пока остановиться на swf-upload'ере (флеш конечно, ну.. что делать).
Посмотри на количество пользователей с мобильных браузеров.
Почему не хочешь сделать нормально, через iframe?

1. foreach + rename
2. Мгновенно.
1
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
27.02.2013, 17:52  [ТС]
Цитата Сообщение от OnYourLips Посмотреть сообщение
Почему не хочешь сделать нормально, через iframe?
хочу, но нет нормального скрипта с прогрессбаром. Запланировано загрузка флеш-файлов до 10 Мб и поэтому без прогресс-бара никак.
Цитата Сообщение от OnYourLips Посмотреть сообщение
1. foreach + rename
а цикл для чего? Нужно папку uniqid('').'/' (с файлами конечно, до 5шт) переместить из папки upload/ в review/
0
0 / 0 / 1
Регистрация: 19.04.2013
Сообщений: 3
04.05.2013, 13:33
мне также пришлось об это лбом удариться

сначала ссылки
1. http://chxo.com/be2/20050724_93bf.html - заголовки стандартной формы отправки файла на сервер

2. http://javascript.ru/ajax/come... ttprequest - здесь хорошо разъяснен принцип

____
теперь то, что собрал


JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
$(':file').change(function(e){
   e.preventDefault();
//----------------------------
   var file = this.files[0];
          var filename = file.name;
          var   size = file.size;
          var mimetype = file.type;
 
//-----------------------------
 
         var delimiter = "boundary";
         var header = "Content-type: multipart/form-data\r\n";
         var boundary = "--"+delimiter+"\r\n";
         
         var   body = 'Content-Disposition: form-data; name="userfile"; filename="' + filename + '"\r\n';
            body += 'Content-Type: ' + mimetype +'\r\n';
            //body += 'Content-Transfer-Encoding: binary\r\n';
            body += 'Content-Length: ' + size + '\r\n\r\n';
               
         var footer = "--"+delimiter+"--";
         var Content_Length = "Content-Length: " + body.length +"\r\n\r\n";
         
         console.log(header+Content_Length+boundary+body+footer);
 
         
 
                $.ajax({
                        url: 'http://site/index.php?option=savef',
                        type: 'POST',
                        data: header+Content_Length+boundary+body+footer,
                              
                       contentType:"multipart/form-data; boundary="+delimiter,
                       success: function(data) {
                              console.log( data );
                        }
                    });
 
});
все работает, только не совсем

выдает сообщение, что не полностью закачивается файл
Code
1
не полностью закачивается файл (ошибка 3 - $_FILES)

Заголовки запроса
Code
1
2
3
4
5
6
7
8
9
10
Accept */*
Accept-Encoding gzip, deflate
Accept-Language ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Connection keep-alive
[B]Content-Length 222
Content-Type multipart/form-data; charset=UTF-8; boundary=boundary[/B]
Cookie f3db512a3ff7fe11c6520833ed95ac93=56p9nulnvt7iun912en7gi3iu5
Host j1525
User-Agent Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101 Firefox/11.0
X-Requested-With XMLHttpRequest
здесь:

массив $_FILES - заполнено только имя файла

и номер ошибки 3



======================
для примера нормальный заголовок, - стандартная форма

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101 Firefox/11.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: f3db512a3ff7fe11c6520833ed95ac93=4522i4hs9vh7dqb3l1d73q2os5
Content-Type: multipart/form-data; boundary=---------------------------114782935826962
Content-Length: 159173
-----------------------------114782935826962
Content-Disposition: form-data; name="part"
 
1
-----------------------------114782935826962
Content-Disposition: form-data; name="vname"
 
 
-----------------------------114782935826962
Content-Disposition: form-data; name="MAX_FILE_SIZE"
 
30000000
-----------------------------114782935826962
Content-Disposition: form-data; name="userfile"; filename="001.jpg"
Content-Type: image/jpeg
 
ÿØÿà
Не понятно что это - ÿØÿà

у gif-a печатает GIF68...


здесь все отлично


Помогите подправить формирование заголовков.

Добавлено через 12 часов 10 минут
====== тема наверное устарела???

собрал на фрейме (jquery.ocupload-1.1.2.js)

и что в заголовках?

То же, что делал раньше POST-ом, в предыдущем скрипте

вот заголовки
Code
1
2
3
4
5
6
7
Content-Type: multipart/form-data; boundary=---------------------------2921238217421
Content-Length: 158295
-----------------------------2921238217421
Content-Disposition: form-data; name="_frm"; filename="001.jpg"
Content-Type: image/jpeg
 
ÿØÿà...  дальше куча символов
т.е.

у меня в предыдущем скрипте, отправлялось только часть файла, первые пару символов

неправильно рассчитывал размер Content-Length: 158295
FF подставлял (наверное) свой Content-Length


теперь следующий вопрос, если кто знает пожалуйста подскажите, как прописать, и правильно рассчитать этот Content-Length?

Добавлено через 26 минут
________________________________________ _________________

судя по всему это и есть проблема Content-Length, получить размер файла
не в HTML5, и не в фрейме и под IE


вот примерчик, аккуратный, хороший, ( там используется уже готовое поле данных )
http://blog.kotowicz.net/2011/... tents.html

но где взять размер файла? ( !!! для файла изображения !!! )


JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
   xhr.open("POST", url, true);
          // simulate a file MIME POST request.
   xhr.setRequestHeader("Content-Type", "multipart/form-data, boundary="+boundary);
   xhr.setRequestHeader("Content-Length", fileSize);
    
   var body = "--" + boundary + "\r\n";
   body += 'Content-Disposition: form-data; name="contents"; filename="' + fileName + '"\r\n';
   body += "Content-Type: application/octet-stream\r\n\r\n";
   body += fileData + "\r\n";
   body += "--" + boundary + "--";
    
   xhr.send(body);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.05.2013, 13:33
Помогаю со студенческими работами здесь

Загрузка файлов на сервер AJAX
Cобственно имеется скрипт. Рабочий,но есть проблема при загрузке файла размером больше 33 мб ,файл не передается обработчику. Максимальный...

Ajax загрузка файлов на сервер
Доброго времени суток. Необходимо загружать файлы на сервер с помощью ajax. Серверный язык - python, фреймворк - Flask. На клиенте - чистый...

Загрузка и скачивание файлов ajax
Приветствую. Есть небольшое приложение, по типу проводника файлов. Имеется дерево узлов и по клику на узле появляется табличка с...

Catalyst + Ajax загрузка файлов
У меня возникла такая проблема, хочу загужать файл на сервер в фоновом режиме, то есть без перезагрузки. для этого сначала пишу форму. ...

Загрузка файлов ajax, в чем ошибка?
Реализую загрузку файлов на сервер. Есть 2 страницы сайта. При загрузке файлов с первой страницы, все ок. При загрузке с другой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru