首先,我知道这个问题已被提出但无论如何我无法解决。 我需要设置下载图像的链接(jpg)。 我在这里和谷歌阅读了各种帖子,但结果总是如此: 我可以下载文件,但它仍然是相同的错误。 jpeg格式不正确。
Erreur d'interprétationdufichier d'image JPEG(不是JPEG文件:启动 用0x0a 0x20)
当我在没有控制器的文件中测试时,没关系,但控制器中的脚本不起作用。
以下是测试代码:
$file = '{document_root}/www/themes/default/images/common/background1.jpg';
if (file_exists($file))
{
header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($file));
header('Content-length: ' . filesize($file));
readfile($file);
exit;
}
此代码适用于简单的php文件。我下载图片,可以打开它。 但是在我的控制器中,文件不好。
我发现了标签?>可以添加空格,但我的控制器没有这个结束标记。 我已经使用各种帖子中的Zend对象测试了一些代码,但这是同样的错误。
我尝试过各种方法来读取文件(file_get_content(),fread()...),结果相同。 我认为我的Zend控制器出了问题。
我现在正在根据这篇文章测试我的文件: php file download: strange http header
任何线索都会非常感激。 谢谢你的帮助,抱歉我的英语不好。
[编辑:21/06/2011 - 6h38] 这是行动的代码
public function downloadAction()
{
$this->view->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
$img = $this->_getParam('img');
// Process the file
$config = Zend_Registry::get('config');
$width = $config->catalog->image->original->maxWidth;
$height = $config->catalog->image->original->maxHeight;
$prefix = $width . 'x' . $height . '_';
$filename = $prefix . $img;
$file = Zend_Registry::get('document_root') . '/data/images/catalog/products/' . $this->_getParam('pid') .'/'. $filename;
if (file_exists($file))
{
$this->getResponse()
->setHeader('Content-Disposition', 'attachment; filename='.$filename)
->setHeader('Content-Transfer-Encoding', 'binary')
->setHeader('Content-Length', filesize($file))
->setHeader('Content-type', 'image/jpeg');
$this->getResponse()->sendHeaders();
readfile($file);
exit;
}
}
不直接调用此操作。我测试url中是否存在参数。 如果为true,则从listAction中调用downloadAction()。 我试图在两个动作中禁用视图和布局,但是有一些html呈现。
答案 0 :(得分:1)
我在解密文件内容后发送内容时遇到同样的问题。 0x0a表示新行。您可能在?>之后有一些新行。在一些包含的类中标记。 放
ob_clean();
flush();
之前
readfile($file);
类似的东西:
header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($file));
header('Content-length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
这对我来说很好。希望能帮助到你。 此致
答案 1 :(得分:0)
我编写工作zend框架:)
public function dowloadfileAction(){
$this->_helper->viewRenderer->setNoRender(true);
$this->_helper->layout->disableLayout();
if ($this->_user->isUserLogin()) {
$path_file = 'public/uploads/file/';
$filename = $this->_getParam('file');; // of course find the exact filename....
$file = $path_file.$filename;
//zfdebug(mime_content_type($file)); die();
if (file_exists($file)) {
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private', false); // required for certain browsers
header('Content-Type: '.mime_content_type($file));
header('Content-Disposition: attachment; filename="'. basename($file) . '";');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
readfile($file);
}else{
echo "File does not exist";
}
}else{
echo "Please Login";
}
exit;
}