Browse Source

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

Fallback to filename based detection if the remote dav server doesn't…
tags/v13.0.0beta2
Roeland Jago Douma 6 years ago
parent
commit
e47137c7d4
No account linked to committer's email address
2 changed files with 29 additions and 10 deletions
  1. 12
    1
      apps/files_external/tests/Storage/WebdavTest.php
  2. 17
    9
      lib/private/Files/Storage/DAV.php

+ 12
- 1
apps/files_external/tests/Storage/WebdavTest.php View File

@@ -28,6 +28,7 @@
namespace OCA\Files_External\Tests\Storage;

use \OC\Files\Storage\DAV;
use OC\Files\Type\Detection;

/**
* Class WebdavTest
@@ -43,7 +44,7 @@ class WebdavTest extends \Test\Files\Storage\Storage {

$id = $this->getUniqueID();
$config = include('files_external/tests/config.webdav.php');
if ( ! is_array($config) or !$config['run']) {
if (!is_array($config) or !$config['run']) {
$this->markTestSkipped('WebDAV backend not configured');
}
if (isset($config['wait'])) {
@@ -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'));
}
}

+ 17
- 9
lib/private/Files/Storage/DAV.php View File

@@ -146,7 +146,7 @@ class DAV extends Common {
}

$proxy = \OC::$server->getConfig()->getSystemValue('proxy', '');
if($proxy !== '') {
if ($proxy !== '') {
$settings['proxy'] = $proxy;
}

@@ -343,11 +343,11 @@ class DAV extends Common {
case 'rb':
try {
$response = $this->httpClientService
->newClient()
->get($this->createBaseUri() . $this->encodePath($path), [
'auth' => [$this->user, $this->password],
'stream' => true
]);
->newClient()
->get($this->createBaseUri() . $this->encodePath($path), [
'auth' => [$this->user, $this->password],
'stream' => true
]);
} catch (RequestException $e) {
if ($e->getResponse() instanceof ResponseInterface
&& $e->getResponse()->getStatusCode() === 404) {
@@ -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,12 +615,11 @@ 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;
}
return false;
}

/**

Loading…
Cancel
Save