singlepost

AJAX – отправка файло, фтв << На главную или назад  

Есть такая проблема.

Мне нужно “по пути” проверить, что за чертовщину загрузил пользователь. Вот форма:

 <form name="upload" action="imgupload.php" method="POST" ENCTYPE="multipart/form-data">
 Выберите скриншот для загрузки: <input type="file" name="userfile">
 <input type="submit" name="Загрузить" value="upload">
 <input name=psw type=hidden value="x95cheat1534">
 </form>

Типичная, стандартная форма. imgupload.php делает кучу проверок и загружает.
Но как проверить “на ходу”? Страница php, подобная imgupload.php у меня есть – она только проверяет статус файла и возвращает результат проверки.

Сама проблема: в PHP для принятия того, что выбрал пользователь (в плане файла) используется массив $FILES, а не $POST. Это меня и насторожило и возникло подозрение по поводу реализации:

//ajaxobj - XmlHttpRequest объект

ajaxobj.onreadystatechange = handleresponse; //какая-то функция, очевидно, что она делает

ajaxobj.open('POST', 'checkimg.php',true);
ajaxobj.send( ??? ) // А вот здесь я хз че писать!

Помогите, пожалуйста! И сорри за столь длинный пост.

9 ответов в теме “AJAX – отправка файло, фтв”

  1. 9
    Александр Новиков ответил:

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

  2. 8
    Денис Федоренко ответил:

    Надеюсь ты уже понял, что извращаться и проверять что либо на стороне клиента по большей части бессмысленно.

  3. 7
    Александр Курганов ответил:

    еще есть проверка на размер изображения.
    > и будет отправлять запросы на сервер окольными путями, разумеется.

    стоит проверка на тип файла и в скрипте аплоада.

  4. 6
    Денис Федоренко ответил:

    > Имя и путь к файлу на компе пользователя

    Это противоречит privacy policy. Короче, никак не получишь.
    А какая тебе разница, какой полный путь у файла, который отправляет пользователь?
    Если тебе все проверки надо сделать на стороне клиента – используй flash, я тебе уже писал в соседней теме.
    Но ваще какой смысл этих проверок – я не знаю. Адекватный пользователь вряд ли "по случайности" будет отправлять, скажем, mp3 вместо картинки, в то же время злоумышленник клал три кучи на твою flash/js/еще какую – обертку, и будет отправлять запросы на сервер окольными путями, разумеется.

  5. 5
    Денис Гублин ответил:

    Может, поможет вот это?
    //vkontakte.ru/topic-912_23006018

    а вот пара сссылок интересных из этой темы
    //habrahabr.ru/blogs/php/44610/
    //habrahabr.ru/blogs/php/44615/

  6. 4
    Александр Курганов ответил:

    >> потестировал на фаерфоксе с document.getElementById('fileInput').value:
    выдает только название файла, не полный путь.

    В этом и вся загвоздка.

  7. 3
    Антон Иванов ответил:

    потестировал на фаерфоксе с document.getElementById('fileInput').value:
    выдает только название файла, не полный путь.

    Возможно есть метод, что-то типа openFileDialog
    В общем гугл в помосч

  8. 2
    Александр Курганов ответил:

    стой-стой. мне не нужно загружать файл на сервер используя аякс. мне нужно лишь передать это странице (checkimg.php) имя и путь к файлу на компе пользователя.

  9. 1
    Антон Иванов ответил:

    //www.google.ru/search?hl=ru&newwindow=1&am…=

    вообще посоветую использовать фреймворки, например jQuery

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.