需要帮助处理XML HTTP文件上载请求
Need Help Handling a XML HTTP File Upload Request
因此,我查阅了一个使用XMLHTTP请求上传文件并将其发送到服务器的教程。我遵循了教程,但是,我想我一定错过了什么。虽然文件看起来是上传和发送的,但"处理程序"文件中的任何内容都不会被访问。我需要编写一个PHP函数来处理它吗?就上下文而言,以下是我所写的:
$(document).ready(function()
{
$('#upload-button').click(function(event)
{
$('#upload-button').removeClass("btn-danger");
});
$( "#report-form" ).submit(function( event )
{
var form = document.getElementById('report-form');
var fileSelect = document.getElementById('file-select');
var uploadButton = document.getElementById('upload-button');
event.preventDefault(); // Stop the event from sending the way it usually does.
uploadButton.value = 'Submitting...'; // Change text.
var files = fileSelect.files;
var maxfiles = <?php echo $config['Report_MaxFiles'] ?>;
var mfs = <?php echo $config['Report_MaxFileSize'] ?>;
if(files.length > maxfiles) // Make sure it's not uploading too many.
{
uploadButton.value = 'You uploaded too many files. The limit is ' + maxfiles + '.'; // Update button text.
$('#upload-button').addClass('btn-danger'); // Make the button red, if so.
return;
}
var formData = new FormData(); // Make a "form data" variable.
for (var i = 0; i < files.length; i++) {
var file = files[i];
// Add the file to the request.
if(file.size / 1000 > mfs)
{
uploadButton.value = 'One of the files is too big. The file size limit is ' + (mfs) + 'kb (' + (mfs / 1000) + 'mb).';
$('#upload-button').addClass('btn-danger');
return;
}
formData.append('files[]', file, file.name); // Not really sure what this does, to be honest,
// but I think it makes a file array.
}
var xhr = new XMLHttpRequest(); // Construct an XML HTTP Request
xhr.open('POST', 'assets/class/FileHandler.php', true); // Open a connection with my handler PHP file.
xhr.onload = function ()
{
if (xhr.status === 200)
{
uploadButton.value = 'Files Submitted!'; // NOTE: I do get this message.
}
else
{
uploadButton.value = 'An error occurred.';
$('#upload-button').addClass("btn-danger");
}
};
xhr.send(formData); // I think this is where it dies.
});
});
在"send(formData)"行,我实际上不确定它是否在发送。我是否在FileHandler.php中设置了某种侦听器,当通过XMLHTTP请求发送文件时,该侦听器会被激活?或者更具体地说,如何使用FileHandler.php文件将上传的文件保存到服务器?
编辑:我还没能在FileHandler.PHP文件中找到除此之外的任何其他PHP代码,我认为在发送表单时可能会调用它(但事实并非如此):
编辑2:好吧,现在我有东西了,但它不起作用(没想到)。我想我可能用错了变量:
<?php
$uploaddir = 'data/reports/uploads/' . $_POST['id'] . "/";
$uploadfile = $uploaddir . basename($_FILES['files']['name']);
echo "<script>console.log('RECEIVED');</script>";
echo '<pre>';
if (move_uploaded_file($_FILES['files']['tmp_name'], $uploadfile)) {
echo "File is valid, and was successfully uploaded.'n";
} else {
echo "Possible file upload attack!'n";
}
echo 'Here is some more debugging info:';
print_r($_FILES);
print "</pre>";
它没有将文件保存到目录中,也没有打印脚本消息。如何让我的report.php文件在FileHandler.php中执行这些内容?
感谢@Florian Lefèvre的帮助和耐心,我修复了它。:)
问题出在路径上。它没有找到文件夹data/uploads/的路径,也没有创建目录。以下是我所做的:
$uploaddir = '../../data/reports/uploads/' . $_POST['id'] . "/";
echo "NAME: " . $_FILES['files']['name'][0] . "'n";
foreach($_FILES['files']['name'] as $filenumber => $filename)
{
$uploadfile = $uploaddir . basename ($filename);
echo "UploadDir " . $uploaddir . "'n";
echo "UploadFile " . $uploadfile . "'n";
echo '<pre>';
echo "MKDir for UploadDir which is: ". $uploaddir . "'n";
mkdir ($uploaddir);
if (move_uploaded_file ($_FILES['files']['tmp_name'][$filenumber], $uploadfile))
{
echo "File is valid, and was successfully uploaded.'n";
}
else
{
echo "Possible file upload attack!'n";
}
echo 'Here is some more debugging info:';
print "</pre>";
}
var_dump ($_FILES);
我还没有摆脱一些调试的东西,但这是一般的解决方案。
相关文章:
- 通过CSV文件上载更新数据库表
- 带有凭据的角度文件上载(CORS)不起作用
- 使用AJAX将文件上载到服务器
- 需要帮助处理XML HTTP文件上载请求
- 使用Javascript中的Dropbox Core API将文件上载到Dropbox
- JQuery文件上载未检测到动态添加的输入
- 通过将文件上载到ASHX处理程序来实现SSE(服务器发送的事件)
- 调用JavaScript函数后,文件上载字段重置
- 仅为文本文件筛选文件上载
- SVG使用Javascript将文件上载到DOM就绪元素
- 将 FormData 对象放入数组中以从不同的输入文件上载文件
- 创建文件上载进度栏ASP.NET和JavaScript
- 文件上载(拖放)无法工作
- 文件上载的大小限制
- PhantomJS文件上载无法使用XPath表达式
- 取消文件上载时删除图像预览
- 使用UploadiFive将多个文件上载到FTP
- 使用ASP将文件上载到服务器.NET和C#
- 正在将img/文件上载到Quickbloxx自定义对象API
- 在文件上载过程中分析文件内容