1

phpスクリプトへのこのajax呼び出しでPOSThttps://www.example.com/php/download.php405(許可されていません)を取得しています。これは、ファイルをダウンロードするために作成したhttpファイルサーバー用です...phpを使用してWebルートの外部でファイルを取得します。私の他のPHPスクリプト/ajax呼び出しは私のhttpファイルサーバーで機能します...この特定のajax呼び出し/phpスクリプトでのみこの問題が発生します。Nginxを使用しています。

繰り返しになりますが、単に強調するために....この同じサーバー上で、他のajax呼び出しや他のphpスクリプトが機能します。だから、ちょっと負けました。

<?php

$path = "/trunk/";
$file = $_POST['filename'];
$file_ext = pathinfo($file, PATHINFO_EXTENSION);
$file_name = pathinfo($file, PATHINFO_BASENAME);
$file_full = $path . $file_name;

$finfo = new finfo(FILEINFO_MIME);

$ctype = $finfo -> file($file_full);
header('Content-Disposition: attachment; filename=\"$file_name\"');
header("Content-Type: " .$ctype);

readfile($file_full);

?>

187 
188 function downloadFile(event) {
189         var fname = event.target.getAttribute("href");
190         fname.replace("#","");
191         var form = new FormData();
192         form.append("filename", fname);
193         
194         var xhr = new XMLHttpRequest();
195         xhr.onreadystatechange = function () {
196 //              setTimeout(refresh, 500);
197         }
198         
199         xhr.open("POST", "php/download.php", true);
200         xhr.send(form);
201 }

これは、GoogleのChromeネットワークデバッガーからのものです。

Request URL:https://www.example.com/php/download.php
Request Method:POST
Status Code:405 Not Allowed
Request Headersview source
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:172
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryNGHvOaUnlBV8ADWE
Host:www.example.com
Origin:https://www.example.com
Referer:https://www.example.com/index.php
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.79 Safari/537.4
Request Payload
------WebKitFormBoundaryNGHvOaUnlBV8ADWE
Content-Disposition: form-data; name="filename"

CentOS-6.3-x86_64-minimal-EFI.iso
------WebKitFormBoundaryNGHvOaUnlBV8ADWE--
Response Headersview source
Connection:keep-alive
Content-Length:568
Content-Type:text/html
Date:Fri, 30 Nov 2012 23:59:59 GMT
Keep-Alive:timeout=300
Server:nginx
4

3 に答える 3

3

nginxの構成を確認してください。あなたのロケーションブロックはあなたがそのファイルにアクセスすることを許可していません。

于 2012-12-01T00:45:26.893 に答える
1

nginx.confで、ロケーションブロックで各phpファイルを個別に指定したことを忘れました。download.phpファイルを追加するのを忘れました。助けてくれたJacobとGuilhermeに感謝します!

于 2012-12-01T00:45:40.337 に答える
0

修理:

header('Content-Disposition: attachment; filename="'.$file_name.'"');

修理:

     xhr.onreadystatechange = function () {
        if (r.readyState===4 && r.status===200) {
           //setTimeout(refresh, 500);
        }
     }

[編集]

試す:

xhr.open("POST", "php/download.php", true);
xhr.onreadystatechange = function () {
    ...
}
xhr.send(form);
于 2012-11-30T23:44:53.140 に答える