2009-05-07 20 views

Trả lời

2

Cách duy nhất khác tôi có thể nghĩ là sửa đổi cài đặt Firefox. Tôi cho rằng bạn không thể làm điều này.

CHỈNH SỬA:

Tôi đã trộn lẫn một giải pháp phía máy khách dựa trên ý tưởng URI dữ liệu. Nó sử dụng phiên bản sửa đổi của base64 encoder và kỹ thuật cho binary XMLHTTPrequests Tập lệnh tải xuống tệp PDF, sau đó tạo và đặt liên kết URI dữ liệu tự động bằng bộ mã hóa base64.

Sẽ hữu ích khi bạn muốn mã hóa luồng octet nhưng không có quyền truy cập vào máy chủ (như trường hợp OP).

Lưu ý, tôi vừa đăng an example sử dụng hunts.pdf, mà OP đang thử nghiệm.

/** 
* 
* Base64 encode/decode 
* http://www.webtoolkit.info/ 
* 
**/ 

var Base64 = { 

    // private property 
    _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/=", 

    // public method for encoding 
    encode : function (input) { 
     var output = ""; 
     var chr1, chr2, chr2raw, chr3, chr3raw, enc1, enc2, enc3, enc4; 
     var i = 0; 

     //input = Base64._utf8_encode(input); 

     while (i < input.length) { 

      chr1 = input.charCodeAt(i++) & 0xFF; 
      chr2 = isNaN(chr2raw = input.charCodeAt(i++)) ? NaN : (chr2raw & 0xFF); 
      chr3 = isNaN(chr3raw = input.charCodeAt(i++)) ? NaN : (chr3raw & 0xFF); 

      enc1 = chr1 >> 2; 
      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); 
      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); 
      enc4 = chr3 & 63; 

      if (isNaN(chr2)) { 
       enc3 = enc4 = 64; 
      } else if (isNaN(chr3)) { 
       enc4 = 64; 
      } 

      output = output + 
      this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) + 
      this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4); 

     } 

     return output; 
    } 
} 



// http://web.archive.org/web/20071103070418/mgran.blogspot.com/2006/08/downloading-binary-streams-with.html 
//fetches BINARY FILES synchronously using XMLHttpRequest 

load_url = function(url) { 
    var req = new XMLHttpRequest(); 
    req.open('GET',url,false); 
    //XHR binary charset opt by Marcus Granado 2006 [http://mgran.blogspot.com] 
    req.overrideMimeType('text/plain; charset=x-user-defined'); 
    req.send(null); 

    if (req.status != 200){ 
    alert(req.status); 
    return ''; 
    } 
    return req.responseText; 
} 

    function getDataURI(filename) 
    { 
    var file = load_url(filename); 
    var uueFile = Base64.encode(file); 
    var uri = 'data:application/octet-stream;base64,' + encodeURIComponent(uueFile); 
    return uri; 
    } 

window.addEventListener("load", 
         function() 
         { 
         var link = getDataURI("foo.pdf"); 
         document.getElementById("myDiv").innerHTML += '<a href="' + link + '"><code>' + link + '</code></a><br><br>'; 
         } 
+0

không: (có vẻ như điều này có thể xảy ra .... –

+0

@raj: Đó chính xác là tiêu đề của nội dung. Nội dung phản hồi là nội dung, tiêu đề là gợi ý cần làm với nội dung đó (ví dụ: Nội dung . -Disposition) – Piskvor

+1

nhờ cho các giải pháp tôi đã cố gắng sử dụng mã dưới đây là đáy của mã tôi đã sử dụng:. window.addEventListener ("tải", function() { var link = getDataURI ("http : //www.google.com/ads/hunts.pdf "); document.getElementById (" myDiv ").innerHTML + = '' + link + '

'; }

hello
Thật không may, không có gì trên file html trừ từ hello. không có pdf. Tôi có cần thứ gì khác không? –

4

Nếu bạn có thể xuất tệp cho máy khách trong base64, bạn có thể sử dụng dữ liệu để tải xuống.

location.href = 'data:application/octet-stream;base64,' + appendPDFContentHere 
OR 
<a href="data:application/octet-stream;base64,appendPDFContentHere">pdf</a> 

Điều này sẽ chỉ hoạt động trong trình duyệt không phải IE nhưng theo yêu cầu của bạn cho firefox, điều này sẽ hoạt động tốt.

CHỈNH SỬA:

Cả hai ví dụ bên dưới đều chứa byte để tạo PNG. Nếu bạn nhấp vào cái đầu tiên, bạn có thể xem hình ảnh như bình thường trong trình duyệt. tuy nhiên, nếu bạn nhấp vào liên kết thứ 2, nó sẽ buộc bạn tải xuống hình ảnh. Lưu nó dưới dạng .png và bạn sẽ thấy chúng là những hình ảnh giống nhau. Sự khác biệt duy nhất trong hai liên kết là loại mime

view image (preview shortened url) - loại mime: image/png

download image (preview shortened url) - loại mime: application/octet-stream

Bạn hỏi những gì bạn đặt thay cho appendPDFContentHere và câu trả lời là các byte được mã hóa base64 tạo nên tệp PDF. Tôi đã sử dụng trực tuyến base64 encoder này để mã hóa hình ảnh được sử dụng trong ví dụ.

+0

Tôi nên đặt nội dung gì vào "nối thêm nội dung PDF tại đây"? toàn bộ PDF? –

+0

hoặc chỉ url đến pdf? –

+0

Không, nếu bạn chỉ làm URL, bạn không thể thêm mimetype (application/octet-stream). –

Các vấn đề liên quan