2013-09-18 2 views
0

У меня проблема с загрузкой файлов, я сохраняю загруженные файлы в не общедоступной папке (не webroot-папке), а затем я хочу, чтобы webPAth из всех загруженных файлов использовала их в видео галерея.symfony2 store загружаемый файл non rootweb

$videos = $repository->getVideosThumbs($this->getUser()); 

, а затем в моей веточке

{% for video in videos %} 
     <a href ="{{ path('neoctus_videobundle_default_watchvideo', {'id' : video.id, 'salt' : app.user.salt }) }}" > 
      <img id="{{ video.id }}" src="/uploads/images/{{video.imgPath}}" alt="1st image description" height="150" width="150" /> 
     </a> 
    {% endfor %} 

, но я не могу получить доступ к фотографии, так как папка не является общедоступной, я знаю, что я должен пройти через й SendFile, но я не вижу, как я может отправить несколько файлов jpeg в заголовок, а затем как восстановить после ветки.

ответ

1

Вы можете создать действие контроллера для доступа к файлам, которые хранятся в непубличной папке. В этом действии вы открываете файл и включаете его в браузер.

Смотрите пример на http://php.net/manual/en/function.readfile.php

Вам нужно будет изменить

header('Content-Disposition: attachment; filename='.basename($file)); 

в

header('Content-Disposition: inline; filename='.basename($file)); 

UPDATE:

Когда у вас есть действие контроллера, который бы поток, просил е Ile, вы можете сделать это в вашей веточке, запрашивая, что действия с требуемым идентификатором файла:

<img src="{{ path('route_to_stream_action', {'fileId':'some_id'}) }}"> 

Браузер будет относиться к текшему файлу точно так же, как если бы он был доступен напрямую, так что вы можете применить любой CSS к нему.

UPDATE:

действия контроллера Пример:

public function streamFileAction($fileId) 
{ 

    // implement your own logic to retrieve file using $fileId 
    $file = $this->getFile($fileId); 

    $filename = basename($file); 

    $response = new StreamedResponse(); 
    $response->setCallback(function() use ($file){ 
     $handle = fopen($file->getRealPath(), 'rb'); 
     while (!feof($handle)) { 
      $buffer = fread($handle, 1024); 
      echo $buffer; 
      flush(); 
     } 
     fclose($handle); 
    }); 
    $d = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_INLINE, $filename); 
    $response->headers->set('Content-Disposition', $d); 
    $response->headers->set('Content-Type', $file->getMimeType()); 

    return $response; 
} 
+0

Спасибо за ваш ответ. , но я знаю, как читать файл непосредственно в моем браузере, мне нужно, как я могу отправить эти файлы на свою ветку, чтобы я мог применить на них некоторые css .. любую идею?! – Bil4l

+0

Помог ли мой ответ вам вообще? – dmnptr

0

Вы также можете использовать функцию "контроллер" в веточке:

{{ render(controller('AcmeBundle:Controller:action')) }} 

запустит

actionAction в ControllerController в AcmeBu ndle.

Надеюсь, что это поможет.

 Смежные вопросы

  • Нет связанных вопросов^_^