|
|
|
|
@ -62,7 +62,36 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
$newPath = $this->path . '/' . $name; |
|
|
|
|
\OC\Files\Filesystem::file_put_contents($newPath, $data); |
|
|
|
|
|
|
|
|
|
// mark file as partial while uploading (ignored by the scanner) |
|
|
|
|
$partpath = $newPath . '.part'; |
|
|
|
|
|
|
|
|
|
\OC\Files\Filesystem::file_put_contents($partpath, $data); |
|
|
|
|
|
|
|
|
|
//detect aborted upload |
|
|
|
|
if (isset ($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] === 'PUT' ) { |
|
|
|
|
if (isset($_SERVER['CONTENT_LENGTH'])) { |
|
|
|
|
$expected = $_SERVER['CONTENT_LENGTH']; |
|
|
|
|
$actual = \OC\Files\Filesystem::filesize($partpath); |
|
|
|
|
if ($actual != $expected) { |
|
|
|
|
\OC\Files\Filesystem::unlink($partpath); |
|
|
|
|
throw new Sabre_DAV_Exception_BadRequest( |
|
|
|
|
'expected filesize ' . $expected . ' got ' . $actual); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// rename to correct path |
|
|
|
|
\OC\Files\Filesystem::rename($partpath, $newPath); |
|
|
|
|
|
|
|
|
|
// allow sync clients to send the mtime along in a header |
|
|
|
|
$mtime = OC_Request::hasModificationTime(); |
|
|
|
|
if ($mtime !== false) { |
|
|
|
|
if(\OC\Files\Filesystem::touch($newPath, $mtime)) { |
|
|
|
|
header('X-OC-MTime: accepted'); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return OC_Connector_Sabre_Node::getETagPropertyForPath($newPath); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|