Merge pull request #6682 from nextcloud/dav-mimetype-fallback

Fallback to filename based detection if the remote dav server doesn't…
This commit is contained in:
Roeland Jago Douma 2017-12-11 15:28:05 +01:00 committed by GitHub
commit e47137c7d4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 10 deletions

View File

@ -28,6 +28,7 @@
namespace OCA\Files_External\Tests\Storage;
use \OC\Files\Storage\DAV;
use OC\Files\Type\Detection;
/**
* Class WebdavTest
@ -61,4 +62,14 @@ class WebdavTest extends \Test\Files\Storage\Storage {
parent::tearDown();
}
public function testMimetypeFallback() {
$this->instance->file_put_contents('foo.bar', 'asd');
/** @var Detection $mimeDetector */
$mimeDetector = \OC::$server->getMimeTypeDetector();
$mimeDetector->registerType('bar', 'application/x-bar');
$this->assertEquals('application/x-bar', $this->instance->getMimeType('foo.bar'));
}
}

View File

@ -590,6 +590,15 @@ class DAV extends Common {
/** {@inheritdoc} */
public function getMimeType($path) {
$remoteMimetype = $this->getMimeTypeFromRemote($path);
if ($remoteMimetype === 'application/octet-stream') {
return \OC::$server->getMimeTypeDetector()->detectPath($path);
} else {
return $remoteMimetype;
}
}
public function getMimeTypeFromRemote($path) {
try {
$response = $this->propfind($path);
if ($response === false) {
@ -606,13 +615,12 @@ class DAV extends Common {
} elseif (isset($response['{DAV:}getcontenttype'])) {
return $response['{DAV:}getcontenttype'];
} else {
return false;
return 'application/octet-stream';
}
} catch (\Exception $e) {
$this->convertException($e, $path);
}
return false;
}
}
/**
* @param string $path