jQuery AJAX загрузка файла PHP
Я хочу реализовать простую загрузку файлов в моей интрасети-странице, с наименьшей возможной настройкой.
Это моя HTML часть:
<input id="sortpicture" type="file" name="sortpic" />
<button id="upload">Upload</button>
и это мой скрипт JS jquery:
$("#upload").on("click", function() {
var file_data = $("#sortpicture").prop("files")[0];
var form_data = new FormData();
form_data.append("file", file_data);
alert(form_data);
$.ajax({
url: "/uploads",
dataType: 'script',
cache: false,
contentType: false,
processData: false,
data: form_data,
type: 'post',
success: function(){
alert("works");
}
});
});
в корневом каталоге веб-сайта есть папка с именем "uploads "с разрешениями на изменение для" пользователей "и"IIS_users".
когда я выбираю файл с формой файла и нажимаю кнопку загрузки, первое предупреждение возвращает "[object FormData]". этот второе предупреждение не вызывается, и папка "uploads" тоже пуста!?
может кто-нибудь помочь мне выяснить, что случилось?
также следующим шагом должно быть переименование файла с именем, созданным на стороне сервера. Может быть, кто-то может дать мне решение для этого тоже.
5 ответов:
вам нужен скрипт, который работает на сервере, чтобы переместить файл в каталог uploads. В jQuery
ajaxметод (работает в браузере) отправляет данные формы на сервер, затем скрипт на сервере обрабатывает загрузку. Вот пример использования PHP.HTML-код-это хорошо, но обновлять свой JS и jQuery скрипт должен выглядеть следующим образом:
$('#upload').on('click', function() { var file_data = $('#sortpicture').prop('files')[0]; var form_data = new FormData(); form_data.append('file', file_data); alert(form_data); $.ajax({ url: 'upload.php', // point to server-side PHP script dataType: 'text', // what to expect back from the PHP script, if anything cache: false, contentType: false, processData: false, data: form_data, type: 'post', success: function(php_script_response){ alert(php_script_response); // display response from the PHP script, if any } }); });а теперь для серверного скрипта, используя PHP в этом случае.
загрузить.php: PHP скрипт который запускается на сервере и направляет файл в каталог uploads:
<?php if ( 0 < $_FILES['file']['error'] ) { echo 'Error: ' . $_FILES['file']['error'] . '<br>'; } else { move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name']); } ?>
кроме того, пара вещей о каталоге назначения:
- убедитесь, что у вас есть правильный путь к серверу, т. е., начиная с местоположения скрипта PHP, каков путь к каталогу uploads, и
- убедитесь, что это writeable.
и немного о функции PHP
move_uploaded_file, используемого в элементе загрузить.php сценарий:move_uploaded_file( // this is where the file is temporarily stored on the server when uploaded // do not change this $_FILES['file']['tmp_name'], // this is where you want to put the file and what you want to name it // in this case we are putting in a directory called "uploads" // and giving it the original filename 'uploads/' . $_FILES['file']['name'] );
$_FILES['file']['name']- это имя загруженного файла. Вы не должны использовать это. Вы можете дать файлу любое имя (совместимое с файловой системой сервера), которое вы хотите:move_uploaded_file( $_FILES['file']['tmp_name'], 'uploads/my_new_filename.whatever' );и, наконец, будьте в курсе вашего PHP
upload_max_filesizeиpost_max_sizeзначения конфигурации, и убедитесь, что ваши тестовые файлы не превышать. Вот как вы проверить PHP конфигурация, а как установить максимальный размер файла и POST параметры.
var formData = new FormData($("#YOUR_FORM_ID")[0]); $.ajax({ url: "upload.php", type: "POST", data : formData, processData: false, contentType: false, beforeSend: function() { }, success: function(data){ }, error: function(xhr, ajaxOptions, thrownError) { console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); } });
и это php-файл для получения uplaoded файлов
<? $data = array(); //check with your logic if (isset($_FILES)) { $error = false; $files = array(); $uploaddir = $target_dir; foreach ($_FILES as $file) { if (move_uploaded_file($file['tmp_name'], $uploaddir . basename( $file['name']))) { $files[] = $uploaddir . $file['name']; } else { $error = true; } } $data = ($error) ? array('error' => 'There was an error uploading your files') : array('files' => $files); } else { $data = array('success' => 'NO FILES ARE SENT','formData' => $_REQUEST); } echo json_encode($data); ?>
**1. index.php** <body> <span id="msg" style="color:red"></span><br/> <input type="file" id="photo"><br/> <script type="text/javascript" src="jquery-3.2.1.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ $(document).on('change','#photo',function(){ var property = document.getElementById('photo').files[0]; var image_name = property.name; var image_extension = image_name.split('.').pop().toLowerCase(); if(jQuery.inArray(image_extension,['gif','jpg','jpeg','']) == -1){ alert("Invalid image file"); } var form_data = new FormData(); form_data.append("file",property); $.ajax({ url:'upload.php', method:'POST', data:form_data, contentType:false, cache:false, processData:false, beforeSend:function(){ $('#msg').html('Loading......'); }, success:function(data){ console.log(data); $('#msg').html(data); } }); }); }); </script> </body> **2.upload.php** <?php if($_FILES['file']['name'] != ''){ $test = explode('.', $_FILES['file']['name']); $extension = end($test); $name = rand(100,999).'.'.$extension; $location = 'uploads/'.$name; move_uploaded_file($_FILES['file']['tmp_name'], $location); echo '<img src="'.$location.'" height="100" width="100" />'; }
Лучшая Загрузка Файлов С Помощью JQuery Ajax С Материализацией Нажмите здесь, чтобы загрузить
при выборе изображения изображение будет преобразовано в базе 64, и вы можете сохранить это в базе данных, так что это будет легкий вес также.
Comments