2011-01-26 20 views
8

HTML sayfamda, bir dosyayı zorlamak için bir php komut dosyasına JQuery ajax isteği yaptım, ancak hiçbir şey olmuyor mu?PHP kuvvet indir çalışmıyor mu?

(a bağlantının tıklama olay işleyicisi olarak) benim html sayfasında

...

var file = "uploads/test.css"; 
$.ajax(
{ 
    type  : "POST", 
    url  : "utils/Download_File.php", 
    data  : {"file":file} 
}) 

Ve Download_File.php komut bu

<?php 

Download_File::download(); 

class Download_File 
{ 
    public static function download() 
    { 
     $file = $_POST['file']; 

     header('Content-Type: application/octet-stream'); 
     header('Content-Disposition: attachment'); 
     readfile('http://localhost/myapp/' . $file); 
     exit; 
    } 
} 
?> 

benziyor Ama hiçbir şey nedense oluyor ? Firebug'daki yanıt başlıklarına baktım ve herhangi bir sorun göremedim. Xampp kullanıyorum. Herhangi bir yardım çok takdir edilmektedir.

Teşekkürler!

+2

Bu şekilde yapılmıyor. İndirmek istediğiniz dosyaya 'location.href' öğesini ayarlamanız veya iframe kullanmanız gerekir. Bu soruya bir göz at: –

+0

[JJuery, PHP kullanarak Ajax Dosya İndirme] olası kopyası (http://stackoverflow.com/questions/3599670/ajax-file-download-using-jquery-php) –

cevap

3

Tamam: Örneğin, böyle bir şey yapabilirdi.

İyi çalışıyor!

9

Content-Transfer-Encoding'u belirtmelisiniz. Ayrıca, Content-Disposition ürününüzde filename'u belirtmeniz gerekir.

header('Content-Type: application/octet-stream'); 
header('Content-Transfer-Encoding: binary'); 
header('Content-Disposition: attachment; filename="'.$file.'"'); 
readfile('http://localhost/myapp/'.$file); 
exit; 

Bu RFC 2231 gerektirdiği gibi filename etrafında çift tırnak dahil etmek önemlidir. Firefox, filename tekliflerinde yer almıyorsa dosya adında boşluk bulunan dosyaların indirilmesiyle ilgili sorun yaşar. Ayrıca, ?> kapandıktan sonra beyaz boşluk olmadığından emin olmak için de işaretleyin. Kapanış PHP etiketinden sonra bile bir alan varsa, üstbilgiler tarayıcıya gönderilmez.

Bir yan not olarak, karşıdan yükleyebileceğiniz bir çok yaygın dosya türünüz varsa, bu MIME türlerini belirtebilirsiniz. Bu son kullanıcı için daha iyi bir deneyim sağlar.

http://www.filamentgroup.com/lab/jquery_plugin_for_requesting_ajax_like_file_downloads/: Sonunda burada bulunan bir JQuery eklentisi kullanarak çalışan bu elde edebildi,

//Handles the MIME type of common files 
$extension = explode('.', $file); 
$extension = $extension[count($extension)-1]; 
SWITCH($extension) { 
    case 'dmg': 
    header('Content-Type: application/octet-stream'); 
    break; 
    case 'exe': 
    header('Content-Type: application/exe'); 
    break; 
    case 'pdf': 
    header('Content-Type: application/pdf'); 
    break; 
    case 'sit': 
    header('Content-Type: application/x-stuffit'); 
    break; 
    case 'zip': 
    header('Content-Type: application/zip'); 
    break; 
    default: 
    header('Content-Type: application/force-download'); 
    break; 
} 
+0

Sadece bir not ... tarayıcı türü ve https ile ilgili bazı sorunlar var .... – Parris

+0

@Parris Bu konuda herhangi bir bilgi paylaşır mısınız? Bazı benzer şeyler yapan bir indirme komut dosyası var (readfile' yerine cURL kullanarak) ve olası bir sorun varsa, kodumda ele almak istiyorum. :) –

+0

Yea ödeme bu soru: http://stackoverflow.com/questions/1218925/php-script-to-download-file-not-working-in-ie Bu sorunu tanımlar ve bunu çözmeye çalışır. Ayrıca, https den indirmeye çalışırken sorunları var ve http:. – Parris