332
 

One-Click Upload - плагин для аплоада файлов на jQuery

One-Click Upload - это плагин для jQuery, который способен заменить стандартный элемент формы для аплоада файлов, причем для этой цели можно использовать ссылки, изображения или любой другой элемент. После инициализации выбранного элемента, по нажатию на него будет отображаться диалог выбора файлов, а сама загрузка файла на сервер будет происходить без перезагрузки страницы. Используя этот плагин вы сможете настроить внешний вид элементов для загрузки файлов так, как вам нужно, в отличие от стандартного поля для загрузки файлов, вид которых крайне трудно изменить (см. пример здесь).

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

Пример

Для создания поля, воспользуемся простой ссылкой, а прогресс отправки файла будем показывать в элементе span=progress:

<a id="upload1" style="background: green; font-size: 24px; color: white;" href="#">Выберите файл</a>
<span id="progress1"></span>

Далее инициализируем поле (определяем его по id):

$('#upload1').upload({
	name: 'file',
	method: 'post',
	enctype: 'multipart/form-data',
	action: 'upload.php',
	onSubmit: function() {
		$('#progress1').text('Отправка файла...');
	},
	onComplete: function(data) {
		$('#progress1').text('Файл успешно отправлен');
	}
});

Ну и сохраняем его на стороне сервера (пример для PHP):

<?php
$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['file']['name']);

if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
    echo "File is valid, and was successfully uploaded.\n";
} else {
    echo "Possible file upload attack!\n";
}
?>

Более подробно о плагине можно узнать на сайте автора или на странице проекта Google Code.

Добавить в закладки:

Комментарии на “One-Click Upload - плагин для аплоада файлов на jQuery”

  1. а как же ненавязчивость? как оно будет без жс работать?

  2. @arty
    Увы, но здесь ненавязчивостью и не пахнет совсем. Нельзя ведь сделать так, чтобы ссылка к примеру, вызывала диалог добавления файла без жс.

  3. Интересно пишите. Подумайте о том, чтобы зарегистрироваться в Яндекс Каталоге, я почему-то думаю, что должны Вас принять. Настоящий проект у Вас, живой какой-то. :) А по программингу там щаз не так много сайтов, я вчера токо смотрел

  4. @Владис
    Спасибо, заявку уже давно оставил, пока безрезультатно :)

  5. не то, чтобы совсем нельзя
    разными нетривиальными способами это возможно : )
    например, прозрачным инпутом поверх ссылки

  6. @arty
    Я ж не говорю, что нельзя, просто не совсем просто с этим делом возиться. Сам когда то делал это с прозрачным инпутом. А с плагином это легко и просто.

  7. Проверка на шелы есть? А то позаливают через него, потом не разгребешь..

  8. @Максим Покровский
    Ну конечно же нет проверки. На JavaScript невозможно проверять то, что заливает пользователь. Это нужно делать на стороне сервера.

  9. Спасибо, очень хорошая библиотека эта, Jquery!!!

  10. Запустил , вроде показывает что файл загружает , а как увидеть куда он его грузит? проверяю на это же скрипте массив $_FILES ничего в нем нету ! как увидеть то файл?

  11. @Saveliy
    Странно, $_FILES не должен быть пуст если файл нормально загружен. Может быть у вас лимит на загрузку файлов на сервер? Проверьте логи, может есть какая ошибка.

  12. Подключил. Все отлично работает на локале. Спасибо! Вот только на хостинге не работет :( Permission denied to get property HTMLDocument.body’ when calling method:…
    Можете объяснить в чем причина?

  13. @kevel
    Не могу сказать определенно, но знаю точно что это ошибка только фаерфокса. Отсюда вопрос, работает ли скрипт в других броузерах. И еще, открывается ли окно выбора файла, и делается ли XMLHTTP запрос?

  14. не работает во всех браузерах:(. ругаеться на строку
    var response = $(myFrame.contentWindow.document.body).text();

  15. @kevel
    Честно говоря, затрудняюсь сказать, что это за проблема (((

  16. у меня такая проблема что на class плагин не вешаеться
    тоесть
    <a href=” rel=”nofollow”>click</a>
    <a href=” rel=”nofollow”>click2</a>
    <a href=” rel=”nofollow”>click3</a>

    $(’.upl’).upload(….); - не работает
    если сделать обработку по клику
    <a href=” rel=”nofollow”>click</a>
    <href=” rel=”nofollow”>click2</a>
    <a href=” rel=”nofollow”>click3</a>

    и примерно так
    $(’.upl’).click(function(){
    var id = $(this).attr(’id’);
    $(’#'+id).upload(…..);
    });

    то тогда приходиться кликать 2 раза и в FF не работает

  17. @gibbzy
    Во-первых, у вас в примере для ссылок не указан класс, так что перепроверьте, все ли у вас правильно. Проверьте, сколько объектов возвращает выражение $(’.upl’).
    Во-вторых, в последнем куске кода вы инициализируете ссылки по id. Точно также вы можете сделать не кликая по ссылкам, а например при событии onready:
    $(document).ready(function(){
    $(’.upl’).each(function(){
    var id = $(this).attr(’id’);
    $(’#'+id).upload(……);
    });
    });
    Точно не могу сказать, почему ваш код не работает в FF, тут надо реальный пример смотреть.

  18. я указывал class просто его сьело форматтером
    c onready спасибо поробую

Оставить комментарий

JSToolbox создан на основе WordPress