发送文件返回 405(方法不允许)

Posted

技术标签:

【中文标题】发送文件返回 405(方法不允许)【英文标题】:Send file return 405(method not allow) 【发布时间】:2017-10-15 15:13:11 【问题描述】:

客户端向服务器发送文件。它使用 XMLHttpRequest() 发出的请求。我使用 php 作为服务器。在浏览器中运行时,从文件 return this error 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);

【问题讨论】:

检查你的api方法。 405错误与CORS无关。服务器只是禁止向它发出 POST 请求。你没有告诉我们服务器是如何配置的,所以我们不知道它为什么拒绝 POST 请求。 哪个api方法? Quentin,这些都是我用作客户端和服务器的代码。我怎么看配置服务器? 【参考方案1】:

请参阅php.ini 配置(在服务器上),如文档中所述。上传文件有多种选择。您可以在 php.net 上找到它,例如

【讨论】:

以上是关于发送文件返回 405(方法不允许)的主要内容,如果未能解决你的问题,请参考以下文章

未发送的发布请求抛出“405 方法不允许”

MVC-Web API:不允许使用 405 方法

Wildfly 允许 OPTIONS 方法但返回 405 Method not allowed

Angular 7:发送 post 请求给出错误 405(不允许的方法)

Flask 文件上传返回错误 405 方法不允许

Spring Boot POST 请求返回 http 状态 405“方法不允许”而不是 HTTP 状态 404