Plupload技术问题:未选择图片时如何触发uploader.php执行?
解决Plupload无文件时无法触发uploader.php的问题
碰到这种情况很正常——Plupload的默认逻辑就是只有当存在待上传文件时才会向服务器发起请求。要实现不管有没有选中图片,都能触发uploader.php执行并处理表单数据,咱们可以从前端入手调整,这里给你两个可行的方案:
方案一:无文件时手动发起AJAX请求
当检测到用户没有选择图片时,直接用AJAX把表单数据发送到uploader.php,有文件时则正常走Plupload的上传流程。这样不需要修改后端代码(你的uploader.php已经兼容无文件的情况)。
修改前端的start-upload点击事件代码:
document.getElementById('start-upload').onclick = function() { const textareaValue = document.getElementById("textarea_input").value; uploader.settings.multipart_params["textarea_input"] = textareaValue; if (uploader.files.length === 0) { // 无文件时,手动发送表单数据到uploader.php const formData = new FormData(); formData.append('textarea_input', textareaValue); fetch('uploader.php', { method: 'POST', body: formData }) .then(response => response.json()) .then(data => { if (data.OK === 1) { window.location = "mobilelogbook.php?saved=2"; } }) .catch(error => { document.getElementById('console').innerHTML += "\nError: " + error.message; }); } else { // 有文件时正常启动Plupload上传 uploader.start(); } };
方案二:添加虚拟文件触发Plupload流程
如果想统一用Plupload的上传逻辑处理所有情况,可以给Plupload添加一个“虚拟文件”,让它认为有文件需要上传,后端再识别并忽略这个虚拟文件。
前端修改
修改start-upload的点击事件,自动添加虚拟文件:
document.getElementById('start-upload').onclick = function() { const textareaValue = document.getElementById("textarea_input").value; uploader.settings.multipart_params["textarea_input"] = textareaValue; if (uploader.files.length === 0) { // 创建一个虚拟空文件 const virtualFile = new plupload.File({ name: 'virtual-empty-file', size: 0 }); // 添加到Plupload实例中 uploader.addFile(virtualFile); } // 启动上传(无论是否有真实文件) uploader.start(); };
后端(uploader.php)修改
添加判断,过滤掉虚拟文件:
<?php $fileName = ''; // 只处理真实的非虚拟文件 if (!empty($_FILES) && $_FILES["file"]["error"] == UPLOAD_ERR_OK && $_FILES["file"]["name"] !== 'virtual-empty-file') { $fileName = $_FILES["file"]["name"]; move_uploaded_file($_FILES["file"]["tmp_name"], "images/logbook/$fileName"); } $log = isset($_POST['textarea_input']) ? $_POST['textarea_input'] : ''; // SQL GOES HERE: ADDS THE TEXTAREA_INPUT AND FILENAME TO A TABLE. die('{"OK": 1}'); ?>
方案选择
- 方案一更简洁,不需要改动后端,适合只需要提交表单数据的场景;
- 方案二更贴合Plupload的原有流程,适合需要统一处理上传进度、错误提示等状态的场景。
内容的提问来源于stack exchange,提问作者Harmen
相关产品推荐
相关产品推荐

