summaryrefslogtreecommitdiffstats
path: root/files
diff options
context:
space:
mode:
authorRobin <robin@Amaya.(none)>2010-03-27 23:50:13 +0100
committerRobin <robin@Amaya.(none)>2010-03-27 23:50:13 +0100
commit4ff703e9ab4e11f83e40b846e9177029fcae73b4 (patch)
treecab2620aa7f6545369b3e138f6c29152d0cbae7f /files
parent5cb7524d5c99c1869d0de7e6cf4fb6606d88712f (diff)
downloadnextcloud-server-4ff703e9ab4e11f83e40b846e9177029fcae73b4.tar.gz
nextcloud-server-4ff703e9ab4e11f83e40b846e9177029fcae73b4.zip
added option to download multiply files or folder as zip file
Diffstat (limited to 'files')
-rw-r--r--files/get_file.php108
1 files changed, 108 insertions, 0 deletions
diff --git a/files/get_file.php b/files/get_file.php
new file mode 100644
index 00000000000..4ad5bc9dc5b
--- /dev/null
+++ b/files/get_file.php
@@ -0,0 +1,108 @@
+<?php
+/**
+* ownCloud - ajax frontend
+*
+* @author Robin Appelman
+* @copyright 2010 Robin Appelman icewind1991@gmail.com
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library 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 Lesser General Public
+* License along with this library. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+//not this file is for getting files themselves, get_files.php is for getting a list of files.
+
+require_once('../inc/lib_base.php');
+
+if(!function_exists('sys_get_temp_dir')) {
+ function sys_get_temp_dir() {
+ if( $temp=getenv('TMP') ) return $temp;
+ if( $temp=getenv('TEMP') ) return $temp;
+ if( $temp=getenv('TMPDIR') ) return $temp;
+ $temp=tempnam(__FILE__,'');
+ if (file_exists($temp)) {
+ unlink($temp);
+ return dirname($temp);
+ }
+ return null;
+ }
+}
+
+function addDir($dir,$zip,$internalDir=''){
+ $dirname=basename($dir);
+ $zip->addEmptyDir($internalDir.$dirname);
+ $internalDir.=$dirname.='/';
+ $files=OC_FILES::getdirectorycontent($dir);
+ foreach($files as $file){
+ $filename=$file['name'];
+ $file=$dir.'/'.$filename;
+ if(is_file($file)){
+ $zip->addFile($file,$internalDir.$filename);
+ }elseif(is_dir($file)){
+ addDir($file,$zip,$internalDir);
+ }
+ }
+}
+
+$files=$_GET['files'];
+$dir=(isset($_GET['dir']))?$_GET['dir']:'';
+if(strstr($files,'..') or strstr($dir,'..')){
+ die();
+}
+if(strpos($files,',')){
+ $files=explode(',',$files);
+}
+
+
+if(is_array($files)){
+ $zip = new ZipArchive();
+ $filename = sys_get_temp_dir()."/ownCloud.zip";
+ if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {
+ exit("cannot open <$filename>\n");
+ }
+ foreach($files as $file){
+ $file=$CONFIG_DATADIRECTORY.'/'.$dir.'/'.$file;
+ if(is_file($file)){
+ $zip->addFile($file,basename($file));
+ }elseif(is_dir($file)){
+ addDir($file,$zip);
+ }
+ }
+ $zip->close();
+}elseif(is_dir($CONFIG_DATADIRECTORY.'/'.$dir.'/'.$files)){
+ $zip = new ZipArchive();
+ $filename = sys_get_temp_dir()."/ownCloud.zip";
+ if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {
+ exit("cannot open <$filename>\n");
+ }
+ $file=$CONFIG_DATADIRECTORY.'/'.$dir.'/'.$files;
+ addDir($file,$zip);
+ $zip->close();
+}else{
+ $zip=false;
+ $filename=$CONFIG_DATADIRECTORY.'/'.$dir.'/'.$files;
+}
+header('Content-Description: File Transfer');
+header('Content-Type: application/octet-stream');
+header('Content-Disposition: attachment; filename='.basename($filename));
+header('Content-Transfer-Encoding: binary');
+header('Expires: 0');
+header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
+header('Pragma: public');
+header('Content-Length: ' . filesize($filename));
+ob_clean();
+readfile($filename);
+if($zip){
+ unlink($filename);
+}
+?> \ No newline at end of file