我正在使用ajax文件上传,我有几个验证工作,但我想在上传过程中确定图像的宽度,如果低宽度图像显示错误信息,但我不会在$ _FILES变量中得到任何东西所以这里它与$ _GET一起工作,但使用我无法使用getimagesize函数确定宽度。我可以使用$ _SERVER [' content_length']确定文件大小。我尝试使用getresolution();
它使用fileupload js librarary
https://github.com/Valums-File-Uploader/file-uploader
这是ajax上传php文件的代码。请帮帮我。
class qqUploadedFileXhr {
/**
* Save the file to the specified path
* @return boolean TRUE on success
*/
function save($path) {
$input = fopen("php://input", "r");
$temp = tmpfile();
$realSize = stream_copy_to_stream($input, $temp);
fclose($input);
if ($realSize != $this->getSize()){
return false;
}
$target = fopen($path, "w");
fseek($temp, 0, SEEK_SET);
stream_copy_to_stream($temp, $target);
fclose($target);
return true;
}
function getresolution(){
$size_res=getimagesize($_GET['qqfile']);
return $size_res[0];
// return implode("<br>",$_SERVER);
}
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.');
}
}
}
/**
* Handle file uploads via regular form post (uses the $_FILES array)
*/
class qqUploadedFileForm {
/**
* Save the file to the specified path
* @return boolean TRUE on success
*/
function save($path) {
if(!move_uploaded_file($_FILES['qqfile']['tmp_name'], $path)){
return false;
}
return true;
}
function mms(){
return $_FILES['qqfile']['tmp_name'];
}
function getName() {
//return $_FILES['qqfile']['name'];
}
function getSize() {
return $_FILES['qqfile']['size'];
}
}
class qqFileUploader {
private $allowedExtensions = array();
private $sizeLimit = 10485760;
private $file;
function __construct(array $allowedExtensions = array(), $sizeLimit = 10485760){
$allowedExtensions = array_map("strtolower", $allowedExtensions);
$this->allowedExtensions = $allowedExtensions;
$this->sizeLimit = $sizeLimit;
$this->checkServerSettings();
if (isset($_GET['qqfile'])) {
$this->file = new qqUploadedFileXhr();
} elseif (isset($_FILES['qqfile'])) {
$this->file = new qqUploadedFileForm();
} else {
$this->file = false;
}
}
private function checkServerSettings(){
$postSize = $this->toBytes(ini_get('post_max_size'));
$uploadSize = $this->toBytes(ini_get('upload_max_filesize'));
if ($postSize < $this->sizeLimit || $uploadSize < $this->sizeLimit){
$size = max(1, $this->sizeLimit / 1024 / 1024) . 'M';
die("{'error':'increase post_max_size and upload_max_filesize to $size'}");
}
}
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){
if (!is_writable($uploadDirectory)){
return array('error' => $uploadDirectory);
}
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' => $this->file->getresolution());
}
$pathinfo = pathinfo($this->file->getName());
if( ! isset($pathinfo['filename'])){
$pathinfo['filename'] = $pathinfo['basename'];
}
$old_name = $pathinfo['filename'] . '.' . $pathinfo['extension'];
$filename = md5($pathinfo['filename'].uniqid('mysecretAHSH',mt_rand()));
$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(!$replaceOldFile){
/// don't overwrite previous files that were uploaded
while (file_exists($uploadDirectory . $filename . '.' . $ext)) {
$filename = md5($filename . rand(10, 99));
}
}
if ($this->file->save($uploadDirectory . $filename . '.' . $ext)){
return array('success'=>true,'size'=>$size,'file_on_disk_name'=>$filename. '.' . $ext,'file_name'=>$old_name);
} else {
return array('error'=> 'Could not save uploaded file.' .
'The upload was cancelled, or server error encountered');
}
}
}
/**
*
* @author Andrei
*
*/
class Ajax_file_upload {
private $allowedExtensions = array();
private $sizeLimit = 10485760;
private $file;
function __construct(array $allowedExtensions = array(), $sizeLimit = 10485760){
$allowedExtensions = array_map("strtolower", $allowedExtensions);
$this->allowedExtensions = $allowedExtensions;
$this->sizeLimit = $sizeLimit;
$this->checkServerSettings();
if (isset($_GET['qqfile'])) {
$this->file = new qqUploadedFileXhr();
} else {
$this->file = false;
}
}
private function checkServerSettings(){
$postSize = $this->toBytes(ini_get('post_max_size'));
$uploadSize = $this->toBytes(ini_get('upload_max_filesize'));
if ($postSize < $this->sizeLimit || $uploadSize < $this->sizeLimit){
$size = max(1, $this->sizeLimit / 1024 / 1024) . 'M';
die("{'error':'increase post_max_size and upload_max_filesize to $size'}");
}
}
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){
if (!is_writable($uploadDirectory)){
return array('error' => "Server error. Upload directory isn't writable.");
}
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');
}
$pathinfo = pathinfo($this->file->getName());
if( ! isset($pathinfo['filename'])){
$pathinfo['filename'] = $pathinfo['basename'];
}
$old_name = $pathinfo['filename'] . '.' . $pathinfo['extension'];
$filename = md5($pathinfo['filename'].uniqid('mysecretAHSH',mt_rand()));
$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(!$replaceOldFile){
/// don't overwrite previous files that were uploaded
while (file_exists($uploadDirectory . $filename . '.' . $ext)) {
$filename = md5($filename . rand(10, 99));
}
}
if ($this->file->save($uploadDirectory . $filename . '.' . $ext)){
return array('success'=>true,'size'=>$size,'file_on_disk_name'=>$filename. '.' . $ext,'file_name'=>$old_name);
} else {
return array('error'=> 'Could not save uploaded file.' .
'The upload was cancelled, or server error encountered');
}
}
}
答案 0 :(得分:1)
您可以在客户端选择文件时进行侦听,并使用FileReader API获取宽度。我做了一个小提琴:http://jsfiddle.net/t9mwfuoo/2/
$('.upload').on('change', function(e) {
var file = e.target.files[0];
var fr = new FileReader();
fr.readAsDataURL(file);
fr.onload = function(frEvent) {
var tmpImage = new Image();
tmpImage.src = frEvent.target.result;
tmpImage.onload = function() {
if (tmpImage.width <= 180) {
alert('Image width is equal to or less than 180 pixels');
} else {
alert('Image width is larger than 180 pixels');
}
}
}
});
答案 1 :(得分:0)
此链接可以帮助您。
http://php.net/manual/en/function.imagesx.php
函数imagesx返回图像的宽度。
<?php
echo imagesx($img); // returns the width
?>
对于您的代码,您必须使用
<?php
$file_width = imagesx($_FILES['qqfile']);
?>
我希望这会对你有所帮助。