added option to download multiply files or folder as zip file
This commit is contained in:
parent
5cb7524d5c
commit
4ff703e9ab
|
@ -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);
|
||||||
|
}
|
||||||
|
?>
|
|
@ -152,6 +152,13 @@ OC_FILES.showbrowser_callback=function(content){
|
||||||
tr=document.createElement('tr');
|
tr=document.createElement('tr');
|
||||||
tbody.appendChild(tr);
|
tbody.appendChild(tr);
|
||||||
tr.className='browserline';
|
tr.className='browserline';
|
||||||
|
td=document.createElement('td');
|
||||||
|
tr.appendChild(td);
|
||||||
|
input=document.createElement('input');
|
||||||
|
input.setAttribute('type','checkbox');
|
||||||
|
input.setAttribute('name','fileSelector');
|
||||||
|
input.setAttribute('value',file['name']);
|
||||||
|
td.appendChild(input);
|
||||||
tr.appendChild(OC_FILES.showicon(file['type']));
|
tr.appendChild(OC_FILES.showicon(file['type']));
|
||||||
td=document.createElement('td');
|
td=document.createElement('td');
|
||||||
tr.appendChild(td);
|
tr.appendChild(td);
|
||||||
|
@ -169,7 +176,7 @@ OC_FILES.showbrowser_callback=function(content){
|
||||||
sizeTd=document.createElement('td');
|
sizeTd=document.createElement('td');
|
||||||
tr.appendChild(sizeTd);
|
tr.appendChild(sizeTd);
|
||||||
sizeTd.className='sizetext';
|
sizeTd.className='sizetext';
|
||||||
sizeTd.appendChild(document.createTextNode(file['size']+' bytes'));
|
sizeTd.appendChild(document.createTextNode(sizeFormat(file['size'])));
|
||||||
}
|
}
|
||||||
a=document.createElement('a');
|
a=document.createElement('a');
|
||||||
img=document.createElement('img');
|
img=document.createElement('img');
|
||||||
|
@ -203,11 +210,23 @@ OC_FILES.showbrowser_callback=function(content){
|
||||||
}
|
}
|
||||||
tr=document.createElement('tr');
|
tr=document.createElement('tr');
|
||||||
tbody.appendChild(tr);
|
tbody.appendChild(tr);
|
||||||
|
tr.className='utilrow';
|
||||||
td=document.createElement('td');
|
td=document.createElement('td');
|
||||||
tr.appendChild(td);
|
tr.appendChild(td);
|
||||||
td.className='upload';
|
td.className='upload';
|
||||||
td.setAttribute('colspan','5');
|
td.setAttribute('colspan','6');
|
||||||
this.showuploader(dir,td,content['max_upload']);
|
this.showuploader(dir,td,content['max_upload']);
|
||||||
|
tr=document.createElement('tr');
|
||||||
|
tbody.appendChild(tr);
|
||||||
|
tr.className='utilrow';
|
||||||
|
td=document.createElement('td');
|
||||||
|
tr.appendChild(td);
|
||||||
|
td.setAttribute('colspan','6');
|
||||||
|
button=document.createElement('input');
|
||||||
|
td.appendChild(button);
|
||||||
|
button.setAttribute('type','button');
|
||||||
|
button.setAttribute('value','Download');
|
||||||
|
button.setAttribute('onclick','OC_FILES.downloadSelected()');
|
||||||
contentNode.appendChild(files);
|
contentNode.appendChild(files);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -225,9 +244,11 @@ OC_FILES.showuploader=function(dir,parent,max_upload){
|
||||||
input.setAttribute('type','hidden');
|
input.setAttribute('type','hidden');
|
||||||
input.setAttribute('name','MAX_FILE_SIZE');
|
input.setAttribute('name','MAX_FILE_SIZE');
|
||||||
input.setAttribute('value',max_upload);
|
input.setAttribute('value',max_upload);
|
||||||
|
input.setAttribute('id','max_upload');
|
||||||
this.uploadForm.appendChild(input);
|
this.uploadForm.appendChild(input);
|
||||||
var file=document.createElement('input');
|
var file=document.createElement('input');
|
||||||
file.name='file';
|
file.name='file';
|
||||||
|
file.setAttribute('id','fileSelector');
|
||||||
file.setAttribute('type','file');
|
file.setAttribute('type','file');
|
||||||
file.setAttribute('onchange','OC_FILES.upload("'+dir+'")');
|
file.setAttribute('onchange','OC_FILES.upload("'+dir+'")');
|
||||||
this.uploadForm.appendChild(document.createTextNode('Upload file: '));
|
this.uploadForm.appendChild(document.createTextNode('Upload file: '));
|
||||||
|
@ -237,6 +258,16 @@ OC_FILES.showuploader=function(dir,parent,max_upload){
|
||||||
|
|
||||||
OC_FILES.upload=function(dir){
|
OC_FILES.upload=function(dir){
|
||||||
OC_FILES.uploadIFrame.setAttribute('onload',"OC_FILES.upload_callback.call(OC_FILES,'"+dir+"')");
|
OC_FILES.uploadIFrame.setAttribute('onload',"OC_FILES.upload_callback.call(OC_FILES,'"+dir+"')");
|
||||||
|
var fileSelector=document.getElementById('fileSelector');
|
||||||
|
var max_upload=document.getElementById('max_upload').value;
|
||||||
|
if(fileSelector.files && fileSelector.files[0].fileSize){
|
||||||
|
var size=fileSelector.files[0].fileSize
|
||||||
|
// new OCNotification('size: '+size,1000);
|
||||||
|
if(size>max_upload){
|
||||||
|
// new OCNotification('Chosen file is to large',20000);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
OC_FILES.uploadForm.submit();
|
OC_FILES.uploadForm.submit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -311,3 +342,39 @@ OC_FILES.remove=function(dir,file){
|
||||||
OC_FILES.remove_callback=function(req){
|
OC_FILES.remove_callback=function(req){
|
||||||
OC_FILES.showbrowser(OC_FILES.dir);
|
OC_FILES.showbrowser(OC_FILES.dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OC_FILES.getSelected=function(){
|
||||||
|
nodes=document.getElementsByName('fileSelector');
|
||||||
|
files=Array();
|
||||||
|
for(index in nodes){
|
||||||
|
if(nodes[index].checked){
|
||||||
|
files[files.length]=nodes[index].value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return files;
|
||||||
|
}
|
||||||
|
|
||||||
|
OC_FILES.downloadSelected=function(){
|
||||||
|
files=OC_FILES.getSelected();
|
||||||
|
if(files.length>1){
|
||||||
|
files.join(';');
|
||||||
|
}else{
|
||||||
|
files=files[0];
|
||||||
|
}
|
||||||
|
window.location=WEBROOT+'/files/get_file.php?dir='+OC_FILES.dir+'&files='+files;
|
||||||
|
}
|
||||||
|
|
||||||
|
sizeFormat=function(size){
|
||||||
|
var orig=size;
|
||||||
|
var steps=Array('B','KiB','MiB','GiB','TiB');
|
||||||
|
var step=0;
|
||||||
|
while(size>(1024*2)){
|
||||||
|
step++;
|
||||||
|
size=size/1024;
|
||||||
|
}
|
||||||
|
// size=orig/(1024^(step+1));//recalculate the size in one time to minimalize rounding errors;
|
||||||
|
if(size.toFixed){
|
||||||
|
size=size.toFixed(2);
|
||||||
|
}
|
||||||
|
return ''+size+' '+steps[step];
|
||||||
|
}
|
Loading…
Reference in New Issue