/
ajaxFileUploaderAction.php
124 lines (105 loc) · 4.11 KB
/
ajaxFileUploaderAction.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<?php
/**
* Handle file uploads via XMLHttpRequest
*/
require_once('IConstants.inc');
require_once($ConstantsArray['dbServerUrl'] ."Parsers/ParserSLM.php");
require_once($ConstantsArray['dbServerUrl'] ."log4php/Logger.php");
$loggerDB = null;
Logger::configure($ConstantsArray['dbServerUrl'] .'log4php/log4php.xml');
$loggerDB = Logger::getLogger($Log4PHP_MyDBLogger);
class qqUploadedFileXhr {
/**
* Save the file to the specified path
* @return boolean TRUE on success
*/
function save($path,$fileType,$loggerDB) {
$input = fopen("php://input", "r");
$theData = fgets($input);
if($fileType == "SLM"){
$parserSLM = new ParserSLM();
$loggerDB->info("Calling SLM parser");
try{
$parserSLM->parseSLMFromString($theData,$loggerDB);
}catch(Exception $e){
$loggerDB->error($e->getMessage());
return false;
}
fclose($input);
}
return true;
}
function getName() {
return $_GET['qqfile'];
}
function getSize() {
if (isset($_SERVER["CONTENT_LENGTH"])){
return (int)$_SERVER["CONTENT_LENGTH"];
} else {
throw new Exception('Getting content length is not supported.');
}
}
}
class qqFileUploader {
private $allowedExtensions = array("txt");
private $sizeLimit = 10485760;
private $file;
private $fileType;
function __construct(array $allowedExtensions = array(), $sizeLimit = 10485760,$fileType){
$allowedExtensions = array_map("strtolower", $allowedExtensions);
$this->allowedExtensions = $allowedExtensions;
$this->sizeLimit = $sizeLimit;
$this->fileType = $fileType;
//$this->checkServerSettings();
$this->file = new qqUploadedFileXhr();
}
private function toBytes($str){
$val = trim($str);
$last = strtolower($str[strlen($str)-1]);
switch($last) {
case 'g': $val *= 1024;
case 'm': $val *= 1024;
case 'k': $val *= 1024;
}
return $val;
}
/**
* Returns array('success'=>true) or array('error'=>'error message')
*/
function handleUpload($uploadDirectory, $replaceOldFile = FALSE,$loggerDB){
if (!$this->file){
return array('error' => 'No files were uploaded.');
}
$size = $this->file->getSize();
if ($size == 0) {
return array('error' => 'File is empty');
}
if ($size > $this->sizeLimit) {
return array('error' => 'File is too large. Allowed size is less than 2MB');
}
$pathinfo = pathinfo($this->file->getName());
$filename = $pathinfo['filename'];
$ext = $pathinfo['extension'];
if($this->allowedExtensions && !in_array(strtolower($ext), $this->allowedExtensions)){
$these = implode(', ', $this->allowedExtensions);
return array('error' => 'File has an invalid extension, it should be one of '. $these . '.');
}
if ($this->file->save($uploadDirectory . $filename . '.' . $ext,"SLM",$loggerDB)){
return array('success'=>true);
} else {
return array('error'=> 'Could not save uploaded file.' .
'The upload was cancelled, or server error encountered. Refer logs for more details.');
}
}
}
// list of valid extensions, ex. array("jpeg", "xml", "bmp")
$allowedExtensions = array();
// max file size in bytes 2MB
$sizeLimit = 1 * 1024 * 1024;
$loggerDB->info("Starting to upload SLM file");
$uploader = new qqFileUploader($allowedExtensions, $sizeLimit,"SLM");
$result = $uploader->handleUpload('files/',FALSE,$loggerDB);
$loggerDB->info("Finishing to upload SLM file with status as ". $result);
// to pass data through iframe you will need to encode all html tags
$result['errMessage'] = "Failed to Upload the File";
echo htmlspecialchars(json_encode($result), ENT_NOQUOTES);