2009-08-25 35 views
29

Tôi có một câu hỏi, làm thế nào tôi có thể làm một cái gì đó như thế này:Zend Framework như thế nào để thiết lập tiêu đề

header("Content-Disposition: inline; filename=result.pdf"); 
header("Content-type: application/x-pdf"); 

Với Zend Framework, tôi đã cố gắng:

 $this->getResponse() 
     ->setHeader('Content-Disposition:inline', ' filename=result.pdf') 
     ->setHeader('Content-type', 'application/x-pdf'); 

Nhưng không hoạt động đúng .

Best Regards,

+0

Có thể tiêu đề đã được gửi? – Pawka

+0

Mime-Type chính xác cho PDF là ứng dụng/pdf. –

Trả lời

53

tuyên bố của bạn để thiết lập các tiêu đề phản ứng là hơi bị thay đổi:

$this->getResponse() 
    ->setHeader('Content-Disposition', 'inline; filename=result.pdf') 
    ->setHeader('Content-type', 'application/x-pdf'); 

Trên đây nên làm việc - xin lưu ý sự khác biệt trong Content-Disposition - tiêu đề.

Nhân tiện ... Khi bạn muốn buộc hộp tải xuống (thay vì tải tài liệu trong trình duyệt), bạn nên sử dụng Content-Dispositionattachment.

$this->getResponse() 
    ->setHeader('Content-Disposition', 'attachment; filename=result.pdf') 
    ->setHeader('Content-type', 'application/x-pdf'); 

Tùy thuộc vào trình duyệt thì vẫn có thể là bạn cũng phải đặt Content-Length hoặc thay đổi Content-type đến một sự kết hợp (nhiều header) của một hoặc nhiều application/force-download, application/octet-stream và/hoặc application/download. Và như tôi đã viết trong bình luận đôi khi bộ nhớ đệm tiêu đề có thể can thiệp vào tải xuống của bạn. Kiểm tra xem các tiêu đề bộ nhớ đệm nào được gửi đi.

+0

Bạn là ví dụ không hoạt động SR, tôi không nhận được hộp tải xuống nữa. Đây là mã của tôi: http://pastebin.com/d6be142ab – Uffo

+0

Trình duyệt nào? Và bạn có thể kiểm tra các tiêu đề thực sự được gửi qua dây không? Đặc biệt, một số tiêu đề bộ nhớ đệm có thể ảnh hưởng đến việc tải xuống tệp. –

+4

@ Uffo: Nếu bạn muốn bắt buộc tải xuống, bạn nên nói như vậy trong câu hỏi của mình. Bạn chỉ hỏi chính xác cách đặt tiêu đề là gì, và câu trả lời ban đầu của S. Gehrig là như vậy. – Rytmis

-5

Giải Quyết

 $this->getResponse() 
     ->setHeader('Content-Disposition:inline', ';filename=result.pdf') 
      ->setHeader('Content-Type', 'application/x-pdf'); 
+2

Nhìn vào câu trả lời của S. Gehrig, đó là câu trả lời đúng. Bạn có thể làm việc, nhưng chỉ tình cờ. ": inline" không phải là một phần của tên của tiêu đề. – Rytmis

6

Đến cuối bảng, tôi có thể đề xuất this action helper làm thành phần đơn giản, có thể tái sử dụng để gửi tệp hoặc dữ liệu bộ nhớ tới trình duyệt.

Có tùy chọn cho bộ nhớ đệm, bố trí và có thể sử dụng Apache Sendfile

+0

tìm thấy cảm ơn bạn – Mark

+3

Liên kết đã chết; bất kỳ lựa chọn thay thế nào? –

+1

@Aron xem http://github.com/noginn/noginn/blob/master/Noginn/Controller/Action/Helper/SendFile.php –

2

Tôi đoán là bạn đang làm một cái gì đó như:

$this->getResponse() 
     ->setHeader('Content-Disposition:inline', ' filename=result.pdf') 
     ->setHeader('Content-type', 'application/x-pdf'); 
fpassthru($filename); 
exit(); 

hoặc một cái gì đó.

Phản hồi ở đây sẽ không bao giờ được hiển thị (hiển thị tiêu đề). Phản hồi được hiển thị trong quá trình in sau hành động, thường là.

Bạn sẽ phải trực tiếp đặt tiêu đề (như bạn đã ghi trong mã không phải oo) hoặc sử dụng trực tiếp $this->getResponse()->sendHeaders().

0

Tôi đã đặt tiêu đề. Nó chưa được đặt, nhưng được thêm vào. Vì vậy, tôi đã có Content-Type của văn bản/html và cũng là ứng dụng/pdf.

Gắn cờ Content-Type với TRUE làm việc tải xuống có thể trong IOS và các thiết bị khác cho thấy chỉ ký hiệu bí ẩn sau khi tải về hoặc một lỗi:

->setHeader('Content-type', 'application/x-pdf', true);

setHeader($name, $value, $replace = false)

từ: https://framework.zend.com/manual/1.12/de/zend.controller.response.html

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