1313
1414namespace Pimcore \Bundle \StudioBackendBundle \Util \Trait ;
1515
16+ use Closure ;
1617use League \Flysystem \FilesystemException ;
1718use League \Flysystem \FilesystemOperator ;
1819use Pimcore \Bundle \StudioBackendBundle \Exception \Api \ElementStreamResourceNotFoundException ;
@@ -42,11 +43,12 @@ protected function getStreamedResponse(
4243 ?int $ fileSize = null ,
4344 ): StreamedResponse {
4445 $ stream = $ element ->getStream ();
46+ $ asset = $ this ->getAsset ($ element );
4547
4648 if (!is_resource ($ stream )) {
4749 throw new ElementStreamResourceNotFoundException (
48- $ element ->getId (),
49- $ element ->getType ()
50+ $ asset ->getId (),
51+ $ asset ->getType ()
5052 );
5153 }
5254
@@ -62,7 +64,7 @@ function () use ($stream) {
6264 $ this ->getResponseHeaders (
6365 mimeType: $ element ->getMimeType (),
6466 fileSize: $ fileSize ,
65- filename: $ element ->getFilename (),
67+ filename: $ asset ->getFilename (),
6668 contentDisposition: $ contentDisposition ,
6769 additionalHeaders: $ additionalHeaders
6870 )
@@ -106,13 +108,17 @@ protected function getFileStreamedResponse(
106108 string $ filename ,
107109 FilesystemOperator $ storage ,
108110 string $ contentDisposition = HttpResponseHeaders::ATTACHMENT_TYPE ->value ,
111+ ?Closure $ onStreamComplete = null ,
109112 ): StreamedResponse {
110113 try {
111114 $ stream = $ storage ->readStream ($ path );
112115
113116 return new StreamedResponse (
114- function () use ($ stream ) {
117+ function () use ($ stream, $ onStreamComplete ) {
115118 fpassthru ($ stream );
119+ if ($ onStreamComplete !== null ) {
120+ $ onStreamComplete ();
121+ }
116122 },
117123 HttpResponseCodes::SUCCESS ->value ,
118124 $ this ->getResponseHeaders (
@@ -135,6 +141,15 @@ function () use ($stream) {
135141
136142 }
137143
144+ private function getAsset (Asset |VideoImageThumbnailInterface |ImageThumbnailInterface $ element ): Asset
145+ {
146+ if ($ element instanceof Asset) {
147+ return $ element ;
148+ }
149+
150+ return $ element ->getAsset ();
151+ }
152+
138153 private function getResponseHeaders (
139154 string $ mimeType ,
140155 int $ fileSize ,
0 commit comments