aboutsummaryrefslogtreecommitdiffstats
path: root/apps/dav/bin
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2015-10-28 14:52:45 +0100
committerThomas Müller <thomas.mueller@tmit.eu>2016-04-12 12:32:04 +0200
commit72f5c539e887d2671641222d33848e28a936d771 (patch)
tree180194907ca16d3dffd1aa0ab037fa75d259e46e /apps/dav/bin
parent276b8a583112203b9b71e4ac2b372e50ca62df9b (diff)
downloadnextcloud-server-72f5c539e887d2671641222d33848e28a936d771.tar.gz
nextcloud-server-72f5c539e887d2671641222d33848e28a936d771.zip
Initial implementation of the new chunked upload - as specified in https://dragotin.wordpress.com/2015/06/22/owncloud-chunking-ng/
Diffstat (limited to 'apps/dav/bin')
-rw-r--r--apps/dav/bin/chunkperf.php76
1 files changed, 76 insertions, 0 deletions
diff --git a/apps/dav/bin/chunkperf.php b/apps/dav/bin/chunkperf.php
new file mode 100644
index 00000000000..a193f001a41
--- /dev/null
+++ b/apps/dav/bin/chunkperf.php
@@ -0,0 +1,76 @@
+<?php
+/**
+ * @author Thomas Müller <thomas.mueller@tmit.eu>
+ *
+ * @copyright Copyright (c) 2016, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+require '../../../../3rdparty/autoload.php';
+
+if ($argc !== 6) {
+ echo "Invalid number of arguments" . PHP_EOL;
+ exit;
+}
+
+/**
+ * @param \Sabre\DAV\Client $client
+ * @param $uploadUrl
+ * @return mixed
+ */
+function request($client, $method, $uploadUrl, $data = null, $headers = []) {
+ echo "$method $uploadUrl ... ";
+ $t0 = microtime(true);
+ $result = $client->request($method, $uploadUrl, $data, $headers);
+ $t1 = microtime(true);
+ echo $result['statusCode'] . " - " . ($t1 - $t0) . ' seconds' . PHP_EOL;
+ if (!in_array($result['statusCode'], [200, 201])) {
+ echo $result['body'] . PHP_EOL;
+ }
+ return $result;
+}
+
+$baseUri = $argv[1];
+$userName = $argv[2];
+$password = $argv[3];
+$file = $argv[4];
+$chunkSize = $argv[5] * 1024 * 1024;
+
+$client = new \Sabre\DAV\Client([
+ 'baseUri' => $baseUri,
+ 'userName' => $userName,
+ 'password' => $password
+]);
+
+$transfer = uniqid('transfer', true);
+$uploadUrl = "$baseUri/uploads/$userName/$transfer";
+
+request($client, 'MKCOL', $uploadUrl);
+
+$size = filesize($file);
+$stream = fopen($file, 'r');
+
+$index = 0;
+while(!feof($stream)) {
+ request($client, 'PUT', "$uploadUrl/$index", fread($stream, $chunkSize));
+ $index++;
+}
+
+$destination = pathinfo($file, PATHINFO_BASENAME);
+//echo "Moving $uploadUrl/.file to it's final destination $baseUri/files/$userName/$destination" . PHP_EOL;
+request($client, 'MOVE', "$uploadUrl/.file", null, [
+ 'Destination' => "$baseUri/files/$userName/$destination"
+]);