Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Загрузка файла в переменную (https://javascript.ru/forum/jquery/32368-zagruzka-fajjla-v-peremennuyu.html)

Oleg_Antonov 13.10.2012 20:52

Загрузка файла в переменную
 
Всем привет. Сразу говорю, далеко не знаток JS. :)
Интересует такой вопрос, реально ли с помощью JQuery загрузить файл, но не загружать его на сервер. Тоесть считать его в переменную JS.

Gvozd 13.10.2012 20:58

Если пользователь сам выберет файл который он хочет загрузить, то вроде это возможно с помощью HTML5 File API
Полностью не уверен, поэтому лучше загуглите на эту тему, заодно можете поискать и плагин jQuery который это позволяет.
Просто же загрузить произвольный файл не получится, если только не использовать всякие дыры безопасности браузеров

Oleg_Antonov 13.10.2012 21:10

Ну это понятно, что пользователь сам выбирает файл. Html 5 не прокатит. Нужно решение, которое работало бы и старых версиях браузеров.

Gvozd 13.10.2012 23:39

Цитата:

Сообщение от Oleg_Antonov
Нужно решение, которое работало бы и старых версиях браузеров.

Это в IE что ли?
Ну если среди ваших клиентов некрофилы(aka офис-планктон и некрофилы) то вам и разбираться с этой проблемой.
Я не вижу решения этой задачи в старых браузерах, и навря ли она есть(без взлома безопасности)

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

Oleg_Antonov 14.10.2012 11:46

В этом я с вами полностью согласен. Только к сожалению у нас есть любимое государство. Которое установило, что данный сайт должен работать, начиная от IE 6. :-/

Gvozd 14.10.2012 18:55

Цитата:

Сообщение от Oleg_Antonov
Только к сожалению у насть есть любимое государство.

Это у вас есть любимое государство.
Не впутывайте в это остальных, и тем более Насть)

Ну в IE можно использовать ActiveX, но для этого пользователь должен сам поставить этот ActiveX, либо разрешить права стандартным ActiveX.
К сожалению с точки зрения браузера это огроменная дыра в безопасности.

Хотя не исключаю, что есть еще какие-то инструменты, о которых я не знаю, так что гуглите, ищите

Oleg_Antonov 14.10.2012 21:01

Я так люблю свою страну, но ненавижу государство. :)

Прочитал, что можно JSом послать запрос к SWF, который вернет обратно прочтенные данные. Но мало чего нашел по этой теме в интернете. Ничего не слышали про такой вариант?

P.S. Насти, обычно девочки хорошие, больше впутывать их не буду. :)

nerv_ 16.10.2012 22:42

Цитата:

Сообщение от Oleg_Antonov
Интересует такой вопрос, реально ли с помощью JQuery загрузить файл, но не загружать его на сервер. Тоесть считать его в переменную JS.

да, квери тут не нужен. Например, после выбора пользователем файла-изображения на жд, его можно открыть в браузере, обрезать и отправить на сервер.
Цитата:

Сообщение от Gvozd
это возможно с помощью HTML5 File API


Цитата:

Сообщение от Gvozd
Я не вижу решения этой задачи в старых браузерах, и навря ли она есть(без взлома безопасности)

тоже не знаю

Цитата:

Сообщение от Gvozd
но для этого пользователь должен сам поставить этот ActiveX

не понял

Gvozd 17.10.2012 09:08

ActiveX - это компилированные бабилотеки, функциональность который доступна из JS в брауезрах IE
Microsoft.XMLHTTP например по-умолчанию доступен.
Но бывают ActiveX И с другими методами/задачами.
Например есть класс для работы с файловой системой(для HTTP_протокола заблокирован)
В общем чтобы получить такую функциональность надо либо чтобы пользователь дал в настройках брауезра права на выполнение других ActiveX, либо установил ваш с нужными вам методами

Gvozd 17.10.2012 09:26

Цитата:

Сообщение от Oleg_Antonov
Прочитал, что можно JSом послать запрос к SWF, который вернет обратно прочтенные данные. Но мало чего нашел по этой теме в интернете. Ничего не слышали про такой вариант?

Кстати, возможно что и удастся
http://javascript.ru/unsorted/bridge-to-flash
Только сначала узнайте, может ли flash загрузить файл в строку
наверно может, если пользователь его выбрал

nerv_ 18.10.2012 20:47

Gvozd, спасибо за ответ

Oleg_Antonov 19.10.2012 18:19

Да. Может. =) Мост такой написал.
Теперь другая проблема появилась. Загружаю я через flash файл, передаю его в js. Обрабатываю. А теперь вопрос как передать его на сервер?
Файлы могут быть до 20мб. Данные закодированны в base64.
Пробывал через ajax. У POST есть ограничения на размер передаваемого файла. И к тому же base64 корявится (точно удаляются +, может и еще что-то). Как поступить в данной ситуации?

Dim@ 19.10.2012 18:32

Oleg_Antonov,
вроде есть возможность передавать файлы через iframe - просто слышал, может быть нельзя, но 20мб это очень много :)

Hoshinokoe 19.10.2012 20:27

Dim@,

можно загружать файлы через iframe
http://javascript.ru/ajax/transport/iframe

dmitriymar 19.10.2012 23:09

Цитата:

Сообщение от Oleg_Antonov
Загружаю я через flash файл, передаю его в js. Обрабатываю. А теперь вопрос как передать его на сервер?

Дак флешем и отдавать

Gvozd 20.10.2012 00:04

Цитата:

Сообщение от Oleg_Antonov
Пробывал через ajax. У POST есть ограничения на размер передаваемого файла

Всмысле у Ajax-овых POST-запросов?
Цитата:

Сообщение от Oleg_Antonov
И к тому же base64 корявится (точно удаляются +, может и еще что-то)

Не совсем верно
Когда вы передаете через AJAX(чистым JS, не используя библиотек вроде jQUery) POST-запрос, то вы должны его верным образом закодировать.
http://htmlbook.ru/html/form/enctype
Если вы не закодировали данные в каком-то из вариантов, то сервер все равно будет пытаться раскодировать в соответсвии с заголовками и своими настройками.
Я практически уверен, что в вашем случае сервер просто взял и раскодировал символы + в символы пробела(остальные символы не были тронуты)
Цитата:

Сообщение от Oleg_Antonov
Как поступить в данной ситуации?

1) Проверить, правда ли AJAX-POST имеет то ограничение о котором вы говорите.
Просто сгенерите длинную строку в 20 мегабайт, из одних букв A, к примеру
И пошлите ее на сервер, и посмотрите, полностью ли ее принял сервер.
2) Создать форму.
Добавить в одно ее текстовое поле пришедший файл в base64
засабмитить форму в скрытый фрейм.
на сервере распаковать base64
3) посмотреть что есть во flash-е по этой задаче, как предложил dmitriymar


Часовой пояс GMT +3, время: 04:29.