Прежде всего, я знаю, что этот вопрос уже задавался, но все равно не могу его решить.Мне нужно установить ссылку для загрузки изображений (JPG).Я читал различные посты, найденные здесь и в Google, но результаты всегда одни и те же: я могу скачать файл, но это все та же ошибка.Неправильный формат JPEG.
Ошибка создания изображения 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-файла: странный заголовок http
Любая подсказка будетбыть действительно ценным.Спасибо за вашу помощь и извините за мой плохой английский.
[ПРАВКА: 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-визуализации.