Fix webdav destination header when overwriting folders

The trailing slash is needed when talking to Apache's mod_dav server
remotes/origin/swift-largeobjectsupport
Vincent Petry 11 years ago
parent a76498f245
commit 6f346b4b1f
No known key found for this signature in database
GPG Key ID: AF8F9EFC56562186
  1. 29
      lib/private/Files/Storage/DAV.php

@ -506,13 +506,18 @@ class DAV extends Common {
$path1 = $this->cleanPath($path1);
$path2 = $this->cleanPath($path2);
try {
// overwrite directory ?
if ($this->is_dir($path2)) {
// needs trailing slash in destination
$path2 = rtrim($path2, '/') . '/';
}
$this->client->request(
'MOVE',
$this->encodePath($path1),
null,
array(
'Destination' => $this->createBaseUri() . $this->encodePath($path2)
)
[
'Destination' => $this->createBaseUri() . $this->encodePath($path2),
]
);
$this->statCache->clear($path1 . '/');
$this->statCache->clear($path2 . '/');
@ -530,10 +535,22 @@ class DAV extends Common {
/** {@inheritdoc} */
public function copy($path1, $path2) {
$this->init();
$path1 = $this->encodePath($this->cleanPath($path1));
$path2 = $this->createBaseUri() . $this->encodePath($this->cleanPath($path2));
$path1 = $this->cleanPath($path1);
$path2 = $this->cleanPath($path2);
try {
$this->client->request('COPY', $path1, null, array('Destination' => $path2));
// overwrite directory ?
if ($this->is_dir($path2)) {
// needs trailing slash in destination
$path2 = rtrim($path2, '/') . '/';
}
$this->client->request(
'COPY',
$this->encodePath($path1),
null,
[
'Destination' => $this->createBaseUri() . $this->encodePath($path2),
]
);
$this->statCache->clear($path2 . '/');
$this->statCache->set($path2, true);
$this->removeCachedFile($path2);

Loading…
Cancel
Save