2010-06-19 38 views
21

giả sử chúng tôi có liên kết pdf "http://manuals.info.apple.com/en/iphone_user_guide.pdf" (ví dụ: để cho bạn biết rằng tệp đó không có trên máy chủ của tôi, tôi chỉ có liên kết) ... ngay bây giờ tôi phải cung cấp một nút trên trang web của tôi sẽ tải xuống tệp.Buộc tải xuống liên kết pdf bằng javascript/ajax/jquery

tôi đã thử nhiều thứ khác nhau như phương thức window.open, href vv nhưng mở liên kết trên cửa sổ khác. tôi biết điều đó bởi vì bây giờ tất cả trình duyệt đều có plugin adobe mở nó trong một cửa sổ khác, nhưng vẫn không có cách nào tôi đưa cho người dùng tùy chọn tải xuống thay vì mở nó, thông qua kịch bản phía máy khách ..

plz help .. cảm ơn

+0

Bạn đã kiểm tra này? http://stackoverflow.com/questions/349067/download-a-file-using-javascript – Fopfong

Trả lời

19

Sử dụng HTML5 "download" thuộc tính

<a href="iphone_user_guide.pdf" download="iPhone User's Guide.PDF">click me</a> 

Cảnh báo: khi viết bài này, không làm việc trong IE/Safari, xem: caniuse.com/#search=download

Edit: Nếu bạn đang tìm kiếm một thực tế giải pháp javascript xin vui lòng xem lajarre's answer

+0

tính năng này trợ giúp như thế nào trong HTML4? Có cách nào khác để làm điều đó không? – Jacques

+0

hi, tôi đã sử dụng cùng một mã nhưng mã đó không hoạt động trong safari, bạn có thể gợi ý cho tôi bất kỳ plugin tốt nào cho phép tải tệp pdf xuống javascript. –

+0

theo caniuse http://caniuse.com/#search=download hiện tại không được hỗ trợ trong safari. Tôi chỉ đoán, nhưng bạn có thể sử dụng 'contentType' của jquery.ajax để đạt được điều này. nếu không, nếu bạn có quyền kiểm soát máy chủ, bạn có thể yêu cầu nó gửi tệp có loại mime nhị phân, tất nhiên. – sarink

7

Với JavaScript rất khó nếu không thể (?). Tôi sẽ đề nghị sử dụng một số loại ngôn ngữ mã-đằng sau như PHP, C#, hoặc Java. Nếu bạn đã sử dụng PHP, bạn có thể, trong trang nút bài viết của mình để, làm một cái gì đó như thế này:

<?php 
header('Content-type: application/pdf'); 
header('Content-disposition: attachment; filename=filename.pdf'); 
readfile("http://manuals.info.apple.com/en/iphone_user_guide.pdf"); 
?> 

này cũng dường như làm việc cho JS (từ http://www.phpbuilder.com/board/showthread.php?t=10149735):

<body> 
<script> 
function downloadme(x){ 
myTempWindow = window.open(x,'','left=10000,screenX=10000'); 
myTempWindow.document.execCommand('SaveAs','null','download.pdf'); 
myTempWindow.close(); 
} 
</script> 

<a href=javascript:downloadme('http://manuals.info.apple.com/en/iphone_user_guide.pdf');>Download this pdf</a> 
</body> 
+0

nó không hoạt động. –

30

Đây là một giải phápJavascript (cho folks như tôi những người đang tìm kiếm một câu trả lời cho tiêu đề):

function SaveToDisk(fileURL, fileName) { 
    // for non-IE 
    if (!window.ActiveXObject) { 
     var save = document.createElement('a'); 
     save.href = fileURL; 
     save.target = '_blank'; 
     save.download = fileName || 'unknown'; 

     var evt = new MouseEvent('click', { 
      'view': window, 
      'bubbles': true, 
      'cancelable': false 
     }); 
     save.dispatchEvent(evt); 

     (window.URL || window.webkitURL).revokeObjectURL(save.href); 
    } 

    // for IE < 11 
    else if (!! window.ActiveXObject && document.execCommand)  { 
     var _window = window.open(fileURL, '_blank'); 
     _window.document.close(); 
     _window.document.execCommand('SaveAs', true, fileName || fileURL) 
     _window.close(); 
    } 
} 

nguồn: http://muaz-khan.blogspot.fr/2012/10/save-files-on-disk-using-javascript-or.html

Thật không may là làm việc cho tôi với IE11, mà không được chấp nhận MouseEvent mới. Tôi sử dụng các trường hợp sau trong trường hợp đó:

//... 
try { 
    var evt = new MouseEvent(...); 
} catch (e) { 
    window.open(fileURL, fileName); 
} 
//... 
+1

lỗi thất bại không có tập tin Bugfixer

+0

cảm ơn phương pháp. nó lưu các tệp dưới dạng "không xác định" Tôi đã thay đổi tệp thành tệpURL mà nó đã lưu tệp dưới dạng "http --- localhost-ielts/gtreading-workbook-Activity_3_1.pdf" Bất kỳ ý tưởng nào về cách sửa lỗi? – hijacker83

+0

Cảm ơn! nó làm việc cho tôi. :) –

0

Trong javascript sử dụng phương thức preventDef() của tham số sự kiện args.

<a href="no-script.html">Download now!</a> 

$('a').click(function(e) { 
    e.preventDefault(); // stop the browser from following 
    window.location.href = 'downloads/file.pdf'; 
}); 
0

Nếu htaccess là một lựa chọn này sẽ làm cho tất cả các liên kết PDF tải về thay vì mở trong trình duyệt

<FilesMatch "\.(?i:pdf)$"> 
    ForceType application/octet-stream 
    Header set Content-Disposition attachment 
</FilesMatch> 
Các vấn đề liên quan