summaryrefslogtreecommitdiffstats
path: root/lib/private/connector
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2013-10-07 17:49:21 +0200
committerThomas Müller <thomas.mueller@tmit.eu>2013-10-07 17:49:21 +0200
commit61a534fb60eb275344e6cf7890fdfe88657e53a6 (patch)
tree06c2b2915a952c9443c4b51f397898c96ba3228a /lib/private/connector
parent5e397d89c4152aee48692b1d302f1f11b16838b3 (diff)
downloadnextcloud-server-61a534fb60eb275344e6cf7890fdfe88657e53a6.tar.gz
nextcloud-server-61a534fb60eb275344e6cf7890fdfe88657e53a6.zip
moving createFileChunked() to OC_Connector_Sabre_File
Diffstat (limited to 'lib/private/connector')
-rw-r--r--lib/private/connector/sabre/file.php49
1 files changed, 34 insertions, 15 deletions
diff --git a/lib/private/connector/sabre/file.php b/lib/private/connector/sabre/file.php
index 8ffec371e3f..f2191732c0d 100644
--- a/lib/private/connector/sabre/file.php
+++ b/lib/private/connector/sabre/file.php
@@ -58,21 +58,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
// chunked handling
if (isset($_SERVER['HTTP_OC_CHUNKED'])) {
- list(, $name) = \Sabre_DAV_URLUtil::splitPath($this->path);
-
- $info = OC_FileChunking::decodeName($name);
- if (empty($info)) {
- throw new Sabre_DAV_Exception_NotImplemented();
- }
- $chunk_handler = new OC_FileChunking($info);
- $chunk_handler->store($info['index'], $data);
- if ($chunk_handler->isComplete()) {
- $newPath = $this->path . '/' . $info['name'];
- $chunk_handler->file_assemble($newPath);
- return $this->getETagPropertyForPath($newPath);
- }
-
- return null;
+ return $this->createFileChunked($data);
}
// mark file as partial while uploading (ignored by the scanner)
@@ -189,4 +175,37 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
return \OC\Files\Filesystem::getMimeType($this->path);
}
+
+ private function createFileChunked($data)
+ {
+ list($path, $name) = \Sabre_DAV_URLUtil::splitPath($this->path);
+
+ $info = OC_FileChunking::decodeName($name);
+ if (empty($info)) {
+ throw new Sabre_DAV_Exception_NotImplemented();
+ }
+ $chunk_handler = new OC_FileChunking($info);
+ $bytesWritten = $chunk_handler->store($info['index'], $data);
+
+ //detect aborted upload
+ if (isset ($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] === 'PUT' ) {
+ if (isset($_SERVER['CONTENT_LENGTH'])) {
+ $expected = $_SERVER['CONTENT_LENGTH'];
+ if ($bytesWritten != $expected) {
+ $chunk_handler->cleanup();
+ throw new Sabre_DAV_Exception_BadRequest(
+ 'expected filesize ' . $expected . ' got ' . $bytesWritten);
+ }
+ }
+ }
+
+ if ($chunk_handler->isComplete()) {
+ $newPath = $path . '/' . $info['name'];
+ $chunk_handler->file_assemble($newPath);
+ return OC_Connector_Sabre_Node::getETagPropertyForPath($newPath);
+ }
+
+ return null;
+ }
+
}