2011-11-05 47 views
1

我有一個簡單的腳本,允許有人下載電影文件到他們的設備。該代碼適用於我測試過的所有內容,除了Andriod。 Android設備會破壞名稱和文件擴展名。它可能會調用文件2.qt或.bin。爲什麼這是失敗的?爲什麼這個PHP下載腳本只能在Android上失敗

<?php 

     if(isset($_GET['filename'])) { 

      header('Content-Description: File Transfer'); 
      header('Content-Type: movie/quicktime'); 
      header('Content-Disposition: attachment; filename="'.basename($file).'"'); 
      header('Content-Transfer-Encoding: binary'); 
      header('Expires: 0'); 
      header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
      header('Pragma: public'); 
      header('Content-Length: ' . filesize("$file")); 
      ob_clean(); 
      flush(); 
      readfile("$file"); 
    } else { 
     echo "Link: <a href='test.php?filename=test.mov'>Download Video</a>"; 
    } 
?> 

回答

0

問題是文件名有空格,Android不喜歡。我刪除了空格,一切都很好。

1

Because Android doesn't natively support Quicktime, an Apple technology.這也是非常有可能是客戶端用於下載這個程序是不尊重的文件名上的HTTP信封,因爲它使用將文件寫入到文件系統,因爲有nothing forcing it to名稱設置。

+0

我知道Android本身不支持Quicktime,但這不是我關心的地方。我只是想能夠下載文件,我不關心它的播放。你說沒有什麼東西強制客戶端將文件名命名爲http信封中提供的名稱。有沒有辦法強制它? – Adam

+0

我閱讀了您提供的鏈接,我認爲這對我沒有幫助。它正在談論用Java編寫Android應用程序,這不是我想要做的。我正在嘗試編寫一個允許設備下載文件的php web應用程序。也許你說我不能強制瀏覽器使用我提供的文件名,除非我編寫一個android應用程序? – Adam

+0

是的,這就是片段的意思。很難說出問題的瀏覽器(可能是原生的還是Doplhin)是如何實現文件下載操作的,但它很可能不會使用您提供或重寫的文件名屬性。 –