主体思路与导航菜单管理相同,唯一的区别是这里有文件上传需求,所以我们这里重点关注文件上传问题
🚩 源代码: step-80
目前遇到的问题是,我们需要在点击保存按钮之前,将图片上传到服务器,并且可以获取到图片的访问路径。
由于我们这里的轮播管理采用的是 AJAX 方式维护,使用之前的表单方式肯定没法在这里使用了(同步方式),这里必须有一种异步上传文件的方式:
明确问题:在选择完图片过后,异步将文件上传到服务端,并获取这张图片的访问路径。
添加一个支持上传文件的接口 upload.php
1// 如果选择了文件 $_FILES['file']['error'] => 02if (empty($_FILES['file']['error'])) {3 // PHP 在会自动接收客户端上传的文件到一个临时的目录4 $temp_file = $_FILES['file']['tmp_name'];5 // 我们只需要把文件保存到我们指定上传目录6 $target_file = '../static/uploads/' . $_FILES['file']['name'];7 if (move_uploaded_file($temp_file, $target_file)) {8 $image_file = '/static/uploads/' . $_FILES['file']['name'];9 }10}1112// 设置响应类型为 JSON13header('Content-Type: application/json');1415if (empty($image_file)) {16 echo json_encode(array(17 'success' => false18 ));19} else {20 echo json_encode(array(21 'success' => true,22 'data' => $image_file23 ));24}🚩 源代码: step-81
1/**2 * 异步上传文件3 */4$('#upload').on('change', function () {5 // 准备要上传的数据6 var formData = new FormData()7 formData.append('file', this.files[0])89 // 发送 AJAX 请求,上传文件10 var xhr = new XMLHttpRequest()11 xhr.open('POST', '/admin/upload.php')12 xhr.addEventListener('load', function () {13 var res = JSON.parse(xhr.response)14 console.log(res)15 })16 xhr.send(formData)17})🚩 源代码: step-82
jQuery 也是可以的(内部仍然是使用的 XMLHttpRequest level 2)
1/**2 * 异步上传文件3 */4$('#upload').on('change', function () {5 // 准备要上传的数据6 var formData = new FormData()7 formData.append('file', this.files[0])89 // 发送 AJAX 请求,上传文件10 $.ajax({11 url: '/admin/upload.php',12 cache: false,13 contentType: false,14 processData: false,15 data: formData,16 type: 'post',17 success: function (res) {18 if (res.success) {19 $('#image').val(res.data).siblings('.thumbnail').attr('src', res.data).fadeIn()20 } else {21 $('#image').val('').siblings('.thumbnail').fadeOut()22 notify('上传文件失败')23 }24 }25 })26})🚩 源代码: step-83