#php #jquery #file-upload
#php #jquery #загрузка файла
Вопрос:
У меня есть скрипт загрузки, который использует PHP (для загрузки) и jQuery для индикатора выполнения. Вот в чем проблема. Я хочу, чтобы было разрешено загружать только файлы в формате MP4. Это работает, мне просто нужна помощь, чтобы выяснить, как исправить ошибки. Смотрите, если это не mp4, он должен отображать эхо Only MP4s are allowed at the time.
в другом месте, он переместит загруженный файл в папку users, затем отобразит эхо Done. Want to see it on <a href=channelname>your channel?</a>
. Вот в чем проблема. Это не приведет к повторению ошибок. Он просто говорит «Готово». всякий раз, когда загрузка файла завершена. Я был бы очень признателен за помощь в том, как я могу это исправить.
Вот мой код.
if ($_SERVER["REQUEST_METHOD"] == "POST" amp;amp; !empty($_FILES["userfile"])) {
$file_type = $_FILES['userfile']['type']; //returns the mimetype
$allowed = array("video/mp4");
if(!in_array($file_type, $allowed)) {
echo "Only MP4 videos are allowed to be uploaded because of security, and this is still a beta.";
echo "<button onclick='window.location.reload()'>Upload a different file</button>";
echo "<script>removeDummy()</script>";
} else {
if (!file_exists($dir)) {
mkdir($dir, 0777, true);
}
move_uploaded_file($_FILES['userfile']['tmp_name'],"videos/".$user."/".$_FILES['userfile']['name']);
echo "Done. Want to see it on <a href='channelname'>your channel</a>?";
}
}
и вот jQuery и JS
function toggleBarVisibility() {
var e = document.getElementById("bar_blank");
e.style.display = (e.style.display == "block") ? "none" : "block";
}
function createRequestObject() {
var http;
if (navigator.appName == "Microsoft Internet Explorer") {
http = new ActiveXObject("Microsoft.XMLHTTP");
}
else {
http = new XMLHttpRequest();
}
return http;
}
function sendRequest() {
var http = createRequestObject();
http.open("GET", "progress.php");
http.onreadystatechange = function () { handleResponse(http); };
http.send(null);
}
function handleResponse(http) {
var response;
if (http.readyState == 4) {
response = http.responseText;
document.getElementById("bar_color").style.width = response "%";
document.getElementById("status").innerHTML = response "%";
if (response < 100) {
setTimeout("sendRequest()", 1000);
}
else {
toggleBarVisibility();
document.getElementById("status").innerHTML = "Done.";
}
}
}
function startUpload() {
toggleBarVisibility();
setTimeout("sendRequest()", 1000);
}
(function () {
document.getElementById("myForm").onsubmit = startUpload;
})();
Когда это будет сделано, он скажет «Готово». как в jQuery. Я хочу, чтобы это отображалось так, как это делает PHP, а не из jQuery.
Комментарии:
1. Поместите
response
вinnerHTML
.2. когда я это делаю, и это выполняется, он говорит «100».
3. Вы отправляете
GET
запрос, но PHP проверяет, работает ли метод запросаPOST
, поэтому код не выполняется.4. PHP-код также ожидает загрузки файла, но вы отправляете файл не на JavaScript.
5. Похоже, что PHP-код не предназначен для этого AJAX-запроса.