From: <kil...@us...> - 2010-12-23 14:15:27
|
Revision: 31630 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=31630&view=rev Author: killianebel Date: 2010-12-23 14:15:20 +0000 (Thu, 23 Dec 2010) Log Message: ----------- [FIX] Mime type detection when uploading a file in WebDAV Modified Paths: -------------- trunk/lib/TikiWebdav/Backend/File.php trunk/lib/mime/mimelib.php Modified: trunk/lib/TikiWebdav/Backend/File.php =================================================================== --- trunk/lib/TikiWebdav/Backend/File.php 2010-12-23 09:08:41 UTC (rev 31629) +++ trunk/lib/TikiWebdav/Backend/File.php 2010-12-23 14:15:20 UTC (rev 31630) @@ -172,62 +172,6 @@ $this->unlock(); } - protected function getMimeType( $path, $filename = '' ) - { - // Check if extension pecl/fileinfo is usable. - if ( $this->options->useMimeExts && ezcBaseFeatures::hasExtensionSupport( 'fileinfo' ) ) - { - $fInfo = new fInfo( FILEINFO_MIME ); - $mimeType = $fInfo->file( $this->root . $path ); - - // The documentation tells to do this, but it does not work with a - // current version of pecl/fileinfo - // $fInfo->close(); - - return $mimeType; - } - - // Check if extension ext/mime-magic is usable. - if ( $this->options->useMimeExts && - ezcBaseFeatures::hasExtensionSupport( 'mime_magic' ) && - ( $mimeType = mime_content_type( $this->root . $path ) ) !== false ) - { - return $mimeType; - } - - // Check if some browser submitted mime type is available. - /* FIXME - $storage = $this->getPropertyStorage( $path ); - $properties = $storage->getAllProperties(); - - if ( isset( $properties['DAV:']['getcontenttype'] ) ) - { - return $properties['DAV:']['getcontenttype']->mime; - } - */ - // Try to detect mimetype from the file extension - if ( ! empty( $filename ) && ( $pos = strrpos( $filename, '.' ) ) !== false ) - { - include_once ("lib/mime/mimetypes.php"); - - $ext = substr( $filename, $pos + 1 ); - - if ( ! empty( $mimetypes[$ext] ) ) - { - return $mimetypes[$ext]; - } - } - - if (isset($mimetypes[$ext])) { - return $mimetypes[$ext]; - } else { - return $defaultmime; - } - - // Default to 'application/octet-stream' if no mimetype has been detected - return 'application/octet-stream'; - } - protected function createCollection( $path ) { global $user, $tikilib; @@ -325,11 +269,15 @@ $fhash = md5( uniqid( $fhash ) ); } while ( file_exists( $this->root . '/' . $fhash ) ); + + $mime = tiki_get_mime($this->root . '/' . $fhash, 'application/octet-stream', $name); } else { $fhash = ''; + $mime = ($objectId['type'] != 'file') ? 'inode/directory' : tiki_get_mime_from_content($content); } print_debug("setResourceContents : $path/$fhash \n"); + $fileInfo = $filegallib->get_file_info($objectId['id'], false, false); $filegalInfo = $filegallib->get_file_gallery_info($fileInfo['galleryId']); @@ -344,8 +292,7 @@ $fileInfo['filename'], $content, @strlen( $content ), - /// empty($this->requestMimeType) ? $fileInfo['filetype'] : $this->requestMimeType, - $this->getMimeType( '/' . $fhash, $name ), + $mime, $user, $fhash, '', Modified: trunk/lib/mime/mimelib.php =================================================================== --- trunk/lib/mime/mimelib.php 2010-12-23 09:08:41 UTC (rev 31629) +++ trunk/lib/mime/mimelib.php 2010-12-23 14:15:20 UTC (rev 31630) @@ -1,6 +1,6 @@ <?php // (c) Copyright 2002-2010 by authors of the Tiki Wiki/CMS/Groupware Project -// +// // All Rights Reserved. See copyright.txt for details and a complete list of authors. // Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. // $Id$ @@ -14,44 +14,82 @@ include_once('lib/mime/mimetypes.php'); // returns mimetypes of files -function tiki_get_mime($filename, $fallback = '') { +function tiki_get_mime($filename, $fallback = '', $fileRealPath = '') { + // Check if extension pecl/fileinfo is usable. + if ( class_exists('fInfo') ) { + $fInfo = new fInfo( FILEINFO_MIME_TYPE ); + $mime = null; + + if ( ! empty( $fileRealPath ) ) { + $mime = $fInfo->file( $fileRealPath ); + } elseif ( file_exists( $filename ) ) { + $mime = $fInfo->file( $filename ); + } + + // The documentation tells to do this, but it does not work with a + // current version of pecl/fileinfo + //$fInfo->close(); + return $mime; + } + + if ( function_exists('mime_content_type') ) { + // notice: this is the better way. + // Compile php with --enable-mime-magic to be able to use this. + + if ( ! empty( $fileRealPath ) ) { + return mime_content_type( $fileRealPath ); + } elseif ( file_exists( $filename ) ) { + return mime_content_type( $filename ); + } + } + + return tiki_get_mime_from_extension($filename, $fallback); +} + +function tiki_get_mime_from_extension($filename, $fallback = '') { global $mimetypes; - - if (function_exists("mime_content_type")) { - //notice: this is the better way. - //Compile php with --enable-mime-magic - //to be able to use this. - return mime_content_type($filename); - - } - + if (isset($mimetypes)) { - - $ext = pathinfo($filename); - $ext = isset($ext['extension']) ? $ext['extension'] : ''; - $mimetype = isset($mimetypes[$ext]) ? $mimetypes[$ext] : ''; - - if (!empty($mimetype)) { - return $mimetype; - } - } - - if ( $fallback != '' ) { - return $fallback; - } else { - //The "Microsoft Way" - just kidding - $defaultmime = "application/octet-stream"; + $ext = pathinfo($filename); + $ext = isset($ext['extension']) ? $ext['extension'] : ''; + $mimetype = isset($mimetypes[$ext]) ? $mimetypes[$ext] : ''; - include_once ("lib/mime/mimetypes.php"); - $filesplit = preg_split("/\.+/", $filename, -1, PREG_SPLIT_NO_EMPTY); - $ext = $filesplit[count($filesplit) - 1]; + if (!empty($mimetype)) { + return $mimetype; + } + } - if (isset($mimetypes[$ext])) { - return $mimetypes[$ext]; - } else { - return $defaultmime; - } + if ( $fallback != '' ) { + return $fallback; + } else { + //The "Microsoft Way" - just kidding + $defaultmime = "application/octet-stream"; + + include_once ("lib/mime/mimetypes.php"); + $filesplit = preg_split("/\.+/", $filename, -1, PREG_SPLIT_NO_EMPTY); + $ext = $filesplit[count($filesplit) - 1]; + + if (isset($mimetypes[$ext])) { + return $mimetypes[$ext]; + } else { + return $defaultmime; + } + } +} + +// try to get mime type from data +function tiki_get_mime_from_content($content, $fallback = '', $filename = '') { + // Check if extension pecl/fileinfo is usable. + if ( class_exists('fInfo') ) { + $fInfo = new fInfo( FILEINFO_MIME_TYPE ); + $mime = $fInfo->buffer( $content ); + // The documentation tells to do this, but it does not work with a + // current version of pecl/fileinfo + //$fInfo->close(); + return $mime; } + + return tiki_get_mime_from_extension($filename, $fallback); } //returns "image" from image/jpeg This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |