image_file_download($uri)
Implements hook_file_download().
Control the access to files underneath the styles directory.
File
- core/modules/image/image.module, line 169
- Exposes global functionality for creating image styles.
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | function image_file_download( $uri ) { $path = file_uri_target( $uri ); // Private file access for image style derivatives. if ( strpos ( $path , 'styles/' ) === 0) { $args = explode ( '/' , $path ); // Discard "styles", style name, and scheme from the path $args = array_slice ( $args , 3); // Then the remaining parts are the path to the image. $original_uri = file_uri_scheme( $uri ) . '://' . implode( '/' , $args ); // Check that the file exists and is an image. $image = \Drupal::service( 'image.factory' )->get( $uri ); if ( $image ->isValid()) { // Check the permissions of the original to grant access to this image. $headers = \Drupal::moduleHandler()->invokeAll( 'file_download' , array ( $original_uri )); // Confirm there's at least one module granting access and none denying access. if (! empty ( $headers ) && !in_array(-1, $headers )) { return array ( // Send headers describing the image's size, and MIME-type. 'Content-Type' => $image ->getMimeType(), 'Content-Length' => $image ->getFileSize(), // By not explicitly setting them here, this uses normal Drupal // Expires, Cache-Control and ETag headers to prevent proxy or // browser caching of private images. ); } } return -1; } } |
Please login to continue.