2011-08-03 52 views
2

我在我的網站上使用Valums Ajax Uploader。一切工作正常我本地計算機上,但是當我嘗試我的網站主服務器上的相同上傳然後Firbug顯示了這個錯誤:valums Ajax文件上傳+ 406不可接受Error in Firbug

POST http://www.myexampledomain.com/upload.php?qqfile=201004151821387.1.flv 406不可接受8.37s
fileuploader.js(線1204)

響應體

<title>406 Not Acceptable</title> 
<p>An appropriate representation of the requested resource /upload.php could not be found on this server.</p> 
<p>Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.</p> 

所有請求&響應頭是herefileuploader.js的文件代碼到附近號線1204:

params = params || {}; 
params['qqfile'] = name; 
var queryString = qq.obj2url(params, this._options.action); 

xhr.open("POST", queryString, true); 
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); 
xhr.setRequestHeader("X-File-Name", encodeURIComponent(name)); 
xhr.setRequestHeader("Content-Type", "application/octet-stream"); 
xhr.send(file); //line 1204 

我已經搜索在谷歌和這個網站,但沒有什麼可被發現,所以請告訴我,我該如何解決這個問題呢?

我關於這個問題的其他問題 - 406 error on firebug only

+0

upload.php也在正確的文件夾,我通過直接訪問它來檢查它 – Peeyush

+0

是否一個簡單的'.txt'文件上傳沒有錯誤?還是所有的上傳都失敗了? – andyb

+0

no .txt也會導致相同的406錯誤 – Peeyush

回答

0

我覺得mod_security的湊了過來。這似乎是一個(只?)來解決,這是通過添加到您.htaccess禁用後置掃描方式如下:

<ifmodule mod_security.c> 
SecFilterScanPOST Off 
</ifmodule> 

我想嘗試的.htaccess添加到您的應用程序的根目錄下,並希望它的工作原理因爲託管服務提供商可能不允許用戶特定的.htaccess文件。

相關文章 - http://tech.shantanugoel.com/2008/05/01/http-406-errors-galore.html

+0

我在.htaccess文件中添加了這個,但仍然給出了406錯誤 – Peeyush

+0

您可能無法[覆蓋](http://httpd.apache.org/docs/2.2/mod /core.html#allowoverride)託管服務提供商設置。你問過他這件事嗎? http://corz.org/serv/tricks/htaccess.php也是'.htaccess'的有用摘要 – andyb

0

我不知道這是否會幫助您解決問題,但我最近使用JQuery $就碰到這個同樣的問題來了POST'ing。我也有類似的問題使用JQuery Qaptcha,它也使用了一些Ajax和POST。

在這兩次我都能夠將POST更改爲GET(包括正在調用的php文件中),然後它將在我的主機的活動服務器上運行。

我還沒有完全理解這樣做的好壞,因爲我在這個領域相當缺乏經驗,所以如果有人有任何想法,這是否是一件壞事,那麼輸入將不勝感激。

例子:

if($cust_acceptance == 'yes') { 

    $.ajax({ 
     type: "GET", //Swapped out a POST for a GET. 
     url: "/scripts/php/update_shortlist.php", 
     data: "action=add&shortlist_id="+shortlist_id+"&rb_ref="+rb_ref, 
     success: function(msg){ 
      //alert ("success: "+rb_ref); 

我想其他人是正確的,它是與mod_security的權限問題,但你不可能有能力說服你的託管公司更改這些設置你 - 如果你是使用共享服務。顯然,如果你在VPS或專用服務器上,你可以自己做出所需的更改。

希望有所幫助。

2

問題出在mod_security。

也許,如果內容編碼與表單不同(不是multipart/form-data或form-urlencoded),則您有阻止所有文件上載請求的規則。

首先 - 你可以在你的apache配置文件中註釋該行。

第二個(對於valums uploader更方便) - 爲你的fileuploader添加encoding:'multipart'選項 - 這將爲Content-Encoding添加multipart/form-data,這樣apache將允許這個請求。

+0

如何將multipart/form-data添加到ajax請求中? – albanx

+0

對於值的上傳者添加參數 編碼:'multipart', –

1

我有同樣的問題,我在.htaccess文件禁用mod_security的解決它

<IfModule mod_security.c> 
    # Turn off mod_security filtering. 
    SecFilterEngine Off 

    # The below probably isn't needed, 
    # but better safe than sorry. 
    SecFilterScanPOST Off 
</IfModule> 

請自行承擔風險使用上面,因爲禁用的mod_security可以預見一些安全漏洞的服務器端。