|
|
|
Ajax загрузка файла на сервер
|
|||
|---|---|---|---|
|
#18+
Текстовые данные грузятся грузятся без проблем. А вот картинку как грузить? HTML форма: Код: html 1. 2. 3. 4. 5. 6. 7. К странице пристёгиваю .js фаил Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ну и в файле /saveNewSubject.php Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. пытался в .js фаиле менять на type: 'post', - непомогло. в чём может быть причина???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 11:41 |
|
||
|
Ajax загрузка файла на сервер
|
|||
|---|---|---|---|
|
#18+
я такого не делал, у нас на работе для этого uploadify используется да, а что если просто указать форме в качестве target невидимый iframe и сделать ей обычный submit ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 12:00 |
|
||
|
Ajax загрузка файла на сервер
|
|||
|---|---|---|---|
|
#18+
на сайте размещаются рекламные обьявления а к ним иногда прилогаются фотою во и прашиваю как это с фджаксом подружить. то что вы предлогаете както не удобоваримо получается! Запрос проходит но в PHP файле я проверял print_r($_FILES); - показывает что пусто ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 12:05 |
|
||
|
Ajax загрузка файла на сервер
|
|||
|---|---|---|---|
|
#18+
а в форме сделал обычный submit ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 12:07 |
|
||
|
Ajax загрузка файла на сервер
|
|||
|---|---|---|---|
|
#18+
Areostarа в форме сделал обычный submitвот и отлично ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 12:11 |
|
||
|
Ajax загрузка файла на сервер
|
|||
|---|---|---|---|
|
#18+
Но почему тогда $_FILES - пустой приходит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 12:41 |
|
||
|
Ajax загрузка файла на сервер
|
|||
|---|---|---|---|
|
#18+
enctype правильный submit обычный, без всяких ajax я не знаю почему $_FILES пустой спросите на форуме по php, может там знают... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 12:45 |
|
||
|
Ajax загрузка файла на сервер
|
|||
|---|---|---|---|
|
#18+
Потомучто аякс не умеет передавать файлы. Ферштейн? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 12:48 |
|
||
|
Ajax загрузка файла на сервер
|
|||
|---|---|---|---|
|
#18+
ShSergeПотомучто аякс не умеет передавать файлы. Ферштейн?Эээ... наверное ты имел ввиду XHR? Пост формы с файлом в ифрейм как бы еще никто не запрещал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 14:47 |
|
||
|
Ajax загрузка файла на сервер
|
|||
|---|---|---|---|
|
#18+
ShSergeПотомучто аякс не умеет передавать файлы. Ферштейн? Как это не умеет, а как-же браузер передаёт? Нужно всего-лишь самому сформировать структуру POST-запроса вместо браузера (а это обычный текст со вставками-бинарными данными), можно даже перевести бинарные в формат base64 с помощью .readAsDataURL() Для этого нужно знать как формировать POST-запрос, а именно: - использовать разделитель границ передаваемых полей - boundary - так называемый уникальный "хеш". - указывать Content-Type: multipart/form-data Вот старый пример прямой передачи файла с ручным формированием POST-запроса на чистом JS: 9984722 , из которого можно даже убрать лишнее, и добавить, например, .readAsDataURL() - хотя есть нюансы, но они решаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 16:35 |
|
||
|
Ajax загрузка файла на сервер
|
|||
|---|---|---|---|
|
#18+
asws, Нихрена он не передаёт. Но, через задний проход можно сделать. Я даже штук десять примеров могу написать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 17:21 |
|
||
|
Ajax загрузка файла на сервер
|
|||
|---|---|---|---|
|
#18+
ShSerge, Возможно, что-то не так у вас с сервером (слеши и т.д.) или с примером, я-же писал, что есть нюансы. Но они решаемы, я несколько лет так делаю, любой POST стараюсь передавать именно таким образом, включая загрузку файлов. Этото пример нуждается в доработке под конкретную ситуацию. Для более расширенных действий, таких как прикрепление нескольких файлов и т.д., нужно почитать документацию по структуре POST - запроса - это всего-лишь обычный текст с границами-разделителями. Разделители разделяют данные, а что это за данные (бинарные или текстовые), абсолютно неважно. Например, я сталкивался с проблемой передачи рисунков в формате dase64 (с помощью .readAsDataURL() ) - - у меня передаются корректно только jpeg-файлы. Это нюансы, зависящие от способа обработки как на клииенте, так и на сервере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 17:31 |
|
||
|
Ajax загрузка файла на сервер
|
|||
|---|---|---|---|
|
#18+
кроме варианта base64 есть ещё xhr2 у него 2 возможности: upload для единичного файла и FormData для формы. но все эти вкусности не доступны в IE9- так что скрытый фрейм - пока единственный универсальный вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 17:35 |
|
||
|
Ajax загрузка файла на сервер
|
|||
|---|---|---|---|
|
#18+
aswsНапример, я сталкивался с проблемой передачи рисунков в формате base64 (с помощью .readAsDataURL() ) - - у меня передаются корректно только jpeg-файлы.странно. весьма. на этом форуме в "быстром ответе" есть передача base64 (если картинка драгндропнулась) - всё норм. работает, все форматы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 17:37 |
|
||
|
Ajax загрузка файла на сервер
|
|||
|---|---|---|---|
|
#18+
Яростный МечaswsНапример, я сталкивался с проблемой передачи рисунков в формате base64 (с помощью .readAsDataURL() ) - - у меня передаются корректно только jpeg-файлы.странно. весьма. на этом форуме в "быстром ответе" есть передача base64 (если картинка драгндропнулась) - всё норм. работает, все форматы.всё верно, но я не стал тогда разбираться, кто виноват - шаред-хостинг или код/браузер, так как клиенту была нужна админка для загрузки именно jpeg-файлов. Но такая проблема возникала, так что у кого-то приведённый пример может заработать, у кого-то нет. Смысл этого примера - показать, как может вручную формироваться POST-запрос. В примере используется только часть возможностей, а можно делать полностью весь POST, включая заголовки, то-есть использовать в конечном итоге только метод .send() браузера... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 17:43 |
|
||
|
Ajax загрузка файла на сервер
|
|||
|---|---|---|---|
|
#18+
Вот состряпал на коленке - передаёт корректно любые файлы через base64. Просьба, для желающих проверить - отпишитесь пожалуйста, как работает. В IE9 не могу сейчас посмотреть, но вроде в нём НЕ будет работать. Используется обычный XMLHttpRequest, который позволяет передавать любые файлы без форм и iframe. Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Код: html 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. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 21:11 |
|
||
|
Ajax загрузка файла на сервер
|
|||
|---|---|---|---|
|
#18+
Примечание: реальное имя php-файла подставлять сюда вместо 'test2': my_HTTP.open('POST','test2.php',true); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 21:20 |
|
||
|
Ajax загрузка файла на сервер
|
|||
|---|---|---|---|
|
#18+
aswsВ IE9 не могу сейчас посмотреть, но вроде в нём НЕ будет работать.не будет - там нет FileReader. А вообще - необходимость подобного кода нынче весьма узкая. Должен быть FileReader, но при этом отсутствовать FormData. Если верить MDN, то единственный случай на десктопе - FF 3.6. А в целом у FormData поддержка немного лучше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 21:37 |
|
||
|
Ajax загрузка файла на сервер
|
|||
|---|---|---|---|
|
#18+
другой момент - если берем содержимое файла в base64, то нет смысла его отправлять именно как "multipart/form-data". это строка, можно отправить как угодно. к тому же серверный код теперь не может обрабатывать сабмит формы с файлом - там не будет никакого base64 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 21:44 |
|
||
|
Ajax загрузка файла на сервер
|
|||
|---|---|---|---|
|
#18+
Да, это понятно, дело в том, что можно формировать из самого JS "файлы с данными", и это будет работать даже из IE8. А формат base64 используется для одновременной передачи 100500 полей через один запрос, в том числе и файлов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 21:47 |
|
||
|
Ajax загрузка файла на сервер
|
|||
|---|---|---|---|
|
#18+
Формат base64 используется для кодирования непечатных символов печатными. Передавать одновременно любое количество полей и файлов можно и без таких заморочек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 21:51 |
|
||
|
Ajax загрузка файла на сервер
|
|||
|---|---|---|---|
|
#18+
то-есть по сути отправляется через .send() строка, которую обрабатывает движок того или иного браузера, и делать конкатенацию строки с бинарными данными - риск, как-бы глюков не было... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 21:52 |
|
||
|
Ajax загрузка файла на сервер
|
|||
|---|---|---|---|
|
#18+
asws, я к тому, что те строковые данные, которые у тебя есть (файлы в base64, тексты) можно с тем же успехом отправить как "application/x-www-form-urlencoded" - всё равно файлы на сервере придется получать из base64 тогда в пхп вместо $_FILES использовать $_POST ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 22:00 |
|
||
|
Ajax загрузка файла на сервер
|
|||
|---|---|---|---|
|
#18+
aswsи делать конкатенацию строки с бинарными данными - риск, как-бы глюков не было...тут ещё есть такой момент: "multipart/form-data" - это в любом случае отправка бинарных данных. если в твоей строке все символы <128, то все норм., а если есть, например, русские буквы? что будет отправлено? FormData, к примеру, всегда преобразует в utf8 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 22:07 |
|
||
|
Ajax загрузка файла на сервер
|
|||
|---|---|---|---|
|
#18+
Яростный Меч, Несколько лет всё корректно в разных браузерах, работаю только с UTF-8 Реальных ситуаций много, поэтому приведённый мной способ может применяться в некоторых случаях. Например, когда php-код не знает, что файлы - это не обязательно именно загруженные лично пользователем... Я привёл это способ и обратил внимание на пользу знаний что такое POST изнутри, потому что сколько видел тем, почему-то утверждается, что XMLHttpRequest этого не может, но дело не в XMLHttpRequest, он-то как раз позволяет описать и передать что угодно, дело на самом деле в FileAPI, поддерживаеется он браузером или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 22:13 |
|
||
|
|

start [/forum/topic.php?fid=22&tid=1447536]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
191ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
84ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 565ms |

| 0 / 0 |
