Можно ли загрузить изображение на сервер с помощью модального диалогового окна Bootstrap, jQuery, AJAX и PHP? Если да, то как? Если нет, то в чем причина?
Я использую PHP, jQuery(jquery-1.9.1.минута.js и jquery-ui-1.10.0.традиция.минута.Яш), технологии Ajax, фреймворк Bootstrap дизайн(начальной загрузки В3.0.0) и т. д.
Я относительно новичок в области веб-программирования.Теперь в одном месте я хочу показать встроенное модальное диалоговое окно Bootstrap framework по щелчку кнопки. В этом модальном диалоговом окне будет элемент управления HTML-файлом для загрузки файла изображения. Пользователь выберет любой файл изображения с его / ее локальной машины по просмотр файлов. Затем после выполнения всех следующих необходимых проверок, таких как
- правильное стандартное расширение изображения
- ограничение максимального размера 5 Мб
- минимальные размеры 940 px * 370 px
Файл должен быть загружен на сервер с помощью PHP-кода. Если какая-либо из проверок завершается неудачно, соответствующее сообщение об ошибке должно отображаться красным цветом над элементом управления HTML выгрузки файла.
Возможно ли достичь такой функциональности? Я слышал что невозможно загрузить файлы с помощью AJAX. Я действительно не знаю, миф это или факт. Если кто-то знает об этом, пожалуйста, объясните мне подробно.
1 ответ:
Да, это возможно. Вот тебе кое-что для начала.
Примечание: Для загрузки изображений используется класс PHP
class.upload.php
. (http://www.verot.net/php_class_upload.htm )Весь этот код был протестирован и работает. Я просто взбил его, так что он довольно простой, но должен указать вам правильное направление. Вам нужно будет санировать входные данные,делать правильные сообщения и т. д.
Просто создайте файл (index.html
) и скопируйте/вставьте в него HTML и JavaScript. Затем создайте файлpost.php
и поместите в него PHP. Загрузите скриптclass.upload.php
и создайте каталог с именемuploads
. Дайте ему соответствующие разрешения (0755 или 0777). Храните все в одной папке для этого примера. Ты должен быть готов к отъезду.
можно даже поместить сообщения об успехах и ошибках прямо в модальный режим. Я просто используюalert()
здесь для краткости. Если вы хотите поместить сообщения в модал, просто создайте<div>
в модале, дайте ему идентификатор, а затем нацельте этот идентификатор на jQuery, где я используюalert()
. Это довольно просто.Edit: Добавлено сообщение в пример. :)
Вот HTML и jQuery (
index.html
)<!DOCTYPE html> <html> <head> <title>Upload a Photo</title> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"> <link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet"> <!--[if lt IE 9]> <script src="//oss.maxcdn.com/libs/html5shiv/r29/html5.min.js"></script> <script src="//oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> <![endif]--> </head> <body> <div class="container"> <button class="btn btn-primary" data-toggle="modal" data-target="#myModal">Open Modal</button> <div class="modal fade" id="myModal"> <div class="modal-dialog"> <div class="modal-content"> <form id="form" enctype="multipart/form-data" role="form"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button> <h4 class="modal-title">Upload Photo</h4> </div> <div class="modal-body"> <div id="messages"></div> <input type="file" name="file" id="file"> </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> <button type="submit" class="btn btn-primary">Save</button> </div> </form> </div> </div> </div> </div> <script src="http://code.jquery.com/jquery.js"></script> <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script> <script> $('#form').submit(function(e) { var form = $(this); var formdata = false; if(window.FormData){ formdata = new FormData(form[0]); } var formAction = form.attr('action'); $.ajax({ type : 'POST', url : 'post.php', cache : false, data : formdata ? formdata : form.serialize(), contentType : false, processData : false, success: function(response) { if(response != 'error') { //$('#messages').addClass('alert alert-success').text(response); // OP requested to close the modal $('#myModal').modal('hide'); } else { $('#messages').addClass('alert alert-danger').text(response); } } }); e.preventDefault(); }); </script> </body> </html>
И ваш PHP скрипт (
post.php
)<?php require_once 'class.upload.php'; $handle = new Upload($_FILES['file']); $handle->allowed = 'image/*'; if($handle->uploaded) { $handle->Process('uploads'); if($handle->processed) { echo 'Image uploaded'; } else { echo 'error'; } }