Отправить файл возврата 405(метод не разрешен)

Клиент отправляет файл на сервер. Запрос сделан с помощью XMLHttpRequest(). Я использую PHP в качестве сервера. При запуске в браузере выгрузка из файла возвращает эту ошибку 405 (СПОСОБ НЕ РАЗРЕШЕН). Требуемый заголовок уже находится в коде PHP. Я не понимаю, почему это не работает

PHP

<?php                                                         
  header("Access-Control-Allow-Origin: *");                   
  header('Access-Control-Allow-Methods: GET, POST, PUT');                  
  $fn = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] : 
  false);

  if ($fn) {

    // AJAX call
    file_put_contents(
    'uploads/' . $fn,
    file_get_contents('php://input')
    );
    echo "$fn uploaded";
    exit();

  }
else {

// form submit
$files = $_FILES['fileselect'];

foreach ($files['error'] as $id => $err) {
    if ($err == UPLOAD_ERR_OK) {
        $fn = $files['name'][$id];
        move_uploaded_file(
            $files['tmp_name'][$id],
            'uploads/' . $fn
        );
        echo "<p>File $fn uploaded.</p>";
    }
   }
 }

JavaScript

    function UploadFile(file) {

    // following line is not necessary: prevents running on SitePoint servers
    if (location.host.indexOf("sitepointstatic") >= 0) return

    var xhr = new XMLHttpRequest();
    if (xhr.upload && file.type == "image/jpeg" && file.size <= $id("MAX_FILE_SIZE").value) {

        // create progress bar
        var o = $id("progress");
        var progress = o.appendChild(document.createElement("p"));
        progress.appendChild(document.createTextNode("upload " + file.name));


        // progress bar
        xhr.upload.addEventListener("progress", function(e) {
            var pc = parseInt(100 - (e.loaded / e.total * 100));
            progress.style.backgroundPosition = pc + "% 0";
        }, false);

        // file received/failed
        xhr.onreadystatechange = function(e) {
            if (xhr.readyState == 4) {
                progress.className = (xhr.status == 200 ? "success" : "failure");
            }
        };

        // start upload
        xhr.open("POST", $id("upload").action, true);
        xhr.setRequestHeader("X_FILENAME", file.name);
        xhr.send(file);//This is line 116

    }

}

Строка 41 - это вызов UploadFile(f);

1 ответ

Пожалуйста, смотрите конфигурацию php.ini (на сервере), как описано в документации. Есть несколько вариантов загрузки файлов. Вы можете найти его на php.net, например

Другие вопросы по тегам