Загрузка файла mp3 приводит к ошибке XHR 404, несмотря на существующий каталог

#javascript #ajax #upload #mp3

Вопрос:

Я создаю веб-страницу, на которую пользователи будут загружать выбранный mp3-файл. Я пытаюсь сделать это в JavaScript / AJAX, как показано ниже:

 //File upload button
var uploadBtn = document.createElement("input");
uploadBtn.innerHTML = "Browse...";
uploadBtn.id = "fileToUpload";
uploadBtn.type = "file";

// Create a submit button
var submitButton = document.createElement("button");
submitButton.innerHTML = "Submit";
submitButton.id = "submitButton";
 

Как только они выберут свой файл и нажмут кнопку отправить (обратите внимание, что mp3File и formdata являются глобальными переменными, созданными в другом месте), этот код будет выполнен:

 mp3File = document.getElementById("fileToUpload").files[0];
formdata = new FormData();
formdata.append("mp3File", mp3File);
var req = new XMLHttpRequest();
req.open("POST", 'mp3_uploads/', true);
req.send(formdata);
 

Я получаю эту ошибку каждый раз:

СООБЩЕНИЕ XHR [путь к моему сайту здесь]/mp3_uploads/ — — — > HTTP/1.1 — 404 — Не Найдено

Я получаю эту ошибку, даже если каталог существует на моем сервере. Обратите внимание, что я также могу загружать mp3-файлы через отдельный HTML-файл, который имеет форму / ссылается на файл PHP, но я бы предпочел не делать этого таким образом, если смогу этого избежать.

Мы будем очень признательны за любую помощь.

Ответ №1:

Пока каталог существует, это не сценарий. И каталог не принимает запрос на публикацию, поэтому вы получите сообщение об ошибке 404.

Вам следует создать PHP-скрипт (или другой язык на стороне сервера), который обрабатывает файл и сохраняет его в каталоге.

Комментарии:

1. Спасибо. Я переключил его на использование AJAX (который вызывает PHP-файл), но он продолжал не работать (и даже не попадал в PHP-файл). Я обнаружил проблему: даже если FormData не пуста и регистрируется в файле AJAX, она не будет отправляться через PHP, если вы явно не создадите форму обратно на странице JavaScript. Поэтому я просто создал реальную форму на странице JavaScript, и это сделало свое дело (даже не потребовав промежуточного шага AJAX, потому что он может напрямую вызывать PHP-файл). В любом случае, спасибо, потому что в конечном счете это помогло мне решить эту проблему. 🙂

2. Не за что! Не забудьте принять мой ответ, если он вам помог.