} session_write_close(); $ownerView = new \OC\Files\View('/' . $user . '/files'); $mime = $ownerView->getMimeType($img); list($mimePart, ) = explode('/', $mime); if ($mimePart === 'image') { $fileInfo = $ownerView->getFileInfo($img); if ($fileInfo['encrypted'] === true) { $local = $ownerView->toTmpFile($img); } else { $local = $ownerView->getLocalFile($img); } $rotate = false; if (is_callable('exif_read_data')) { //don't use OCP\Image here, using OCP\Image will always cause parsing the image file $exif = @exif_read_data($local, 'IFD0'); if (isset($exif['Orientation'])) { $rotate = $exif['Orientation'] > 1; } } OCP\Response::setContentDispositionHeader(basename($img), 'attachment'); if ($rotate) { $image = new OCP\Image($local); $image->fixOrientation(); $image->show(); } else { //use the original file if we dont need to rotate, saves having to re-encode the image header('Content-Type: ' . $mime); $ownerView->readfile($img); } }