我正在尝试使用<object>
和<embed>
标签显示在FuelPHP中上传的PDF文件。
注意:如果你转到页面,/ upload / image?image_id = 1会下载正确的pdf。但是当它嵌入我的浏览器时,它是不可见的。我使用的是最新版本的Chrome版本34.0.1847.116
另一个注意事项是,如果pdf位于htdocs文件夹中,预览也会显示正常。此外,我使用这种下载方法来显示图像,它与<img src="/upload/image?image_id=some_num">
这是我的Rest Controller ..
<?php
class Controller_Upload extends Controller_Rest
{
public function after($response) {
parent::after($response);
return $this->response(json_encode($this->data));
}
public function get_image()
{
$image_id = Input::post("image_id");
$file_name = (Input::get('image_name') != null) ? Input::get('image_name') : Model_Db_Storage::get_image($this->userid, $image_id);
if($file_name)
{
$this->response->set_header('Content-Type', 'application/pdf');
File::download(APPPATH.'/tmp/'.$file_name);
}
else
{
$this->data['image'] = $file_name;
$this->data['response'] = 'Error Receipt not Found';
}
}
}
?>
HTML:
<object data="/upload/image?image_id=1" type="application/pdf">
<embed src="/upload/image?image_id=1" type="application/pdf" />
</object>
答案 0 :(得分:0)
这似乎更像是一个HTML问题,而不是一个实际的FuelPHP问题,因为你说在浏览器中直接查看PDF时它是有效的。
我认为您最好使用iframe代码。
请参阅此question and answer。
简单的例子是:
<iframe width="400" height="215" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="/upload/image?image_id=some_num"></iframe>
答案 1 :(得分:0)
这是我通过决定输出原始字节而想出的解决方案。
我将HTMl代码更改为iframe而不是
<iframe src="/upload/image?image_id=1"></iframe>
然后我改变了输出文件的方式:
$this->response->set_header('Content-Type', 'application/pdf');
//File::download(APPPATH.'/tmp/'.$file_name);
echo File::read(APPPATH.'/tmp/'.$file_name);
return new Response();