sort out a few more large image upload issues
This commit is contained in:
parent
3c3c0ed342
commit
8e53491867
@ -210,8 +210,6 @@ class Browser extends DAV\Browser\Plugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$attachIcon = ""; // "<a href=\"attach/".$attachHash."\" title=\"".$displayName."\"><i class=\"fa fa-arrow-circle-o-down\"></i></a>";
|
$attachIcon = ""; // "<a href=\"attach/".$attachHash."\" title=\"".$displayName."\"><i class=\"fa fa-arrow-circle-o-down\"></i></a>";
|
||||||
|
|
||||||
// put the array for this file together
|
// put the array for this file together
|
||||||
|
@ -299,6 +299,17 @@ class Directory extends DAV\Node implements DAV\ICollection, DAV\IQuota {
|
|||||||
$is_photo = 1;
|
$is_photo = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If we know it's a photo, over-ride the type in case the source system could not determine what it was
|
||||||
|
|
||||||
|
if($is_photo) {
|
||||||
|
q("update attach set filetype = '%s' where hash = '%s' and uid = %d",
|
||||||
|
dbesc($gis['mime']),
|
||||||
|
dbesc($hash),
|
||||||
|
intval($c[0]['channel_id'])
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// updates entry with filesize and timestamp
|
// updates entry with filesize and timestamp
|
||||||
$d = q("UPDATE attach SET filesize = '%s', os_path = '%s', display_path = '%s', is_photo = %d, edited = '%s' WHERE hash = '%s' AND uid = %d",
|
$d = q("UPDATE attach SET filesize = '%s', os_path = '%s', display_path = '%s', is_photo = %d, edited = '%s' WHERE hash = '%s' AND uid = %d",
|
||||||
dbesc($size),
|
dbesc($size),
|
||||||
|
@ -168,6 +168,17 @@ class File extends DAV\Node implements DAV\IFile {
|
|||||||
if(($gis) && ($gis[2] === IMAGETYPE_GIF || $gis[2] === IMAGETYPE_JPEG || $gis[2] === IMAGETYPE_PNG)) {
|
if(($gis) && ($gis[2] === IMAGETYPE_GIF || $gis[2] === IMAGETYPE_JPEG || $gis[2] === IMAGETYPE_PNG)) {
|
||||||
$is_photo = 1;
|
$is_photo = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If we know it's a photo, over-ride the type in case the source system could not determine what it was
|
||||||
|
|
||||||
|
if($is_photo) {
|
||||||
|
q("update attach set filetype = '%s' where hash = '%s' and uid = %d",
|
||||||
|
dbesc($gis['mime']),
|
||||||
|
dbesc($this->data['hash']),
|
||||||
|
intval($this->data['uid'])
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// this shouldn't happen any more
|
// this shouldn't happen any more
|
||||||
|
@ -588,6 +588,12 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
|
|||||||
$def_extension = '.png';
|
$def_extension = '.png';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If we know it's a photo, over-ride the type in case the source system could not determine what it was
|
||||||
|
|
||||||
|
if($is_photo) {
|
||||||
|
$type = $gis['mime'];
|
||||||
|
}
|
||||||
|
|
||||||
$pathname = '';
|
$pathname = '';
|
||||||
|
|
||||||
if($is_photo) {
|
if($is_photo) {
|
||||||
|
@ -309,6 +309,11 @@ abstract class photo_driver {
|
|||||||
|
|
||||||
public function save($arr) {
|
public function save($arr) {
|
||||||
|
|
||||||
|
if(! $this->is_valid()) {
|
||||||
|
logger('attempt to store invalid photo.');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
$p = array();
|
$p = array();
|
||||||
|
|
||||||
$p['aid'] = ((intval($arr['aid'])) ? intval($arr['aid']) : 0);
|
$p['aid'] = ((intval($arr['aid'])) ? intval($arr['aid']) : 0);
|
||||||
@ -331,6 +336,8 @@ abstract class photo_driver {
|
|||||||
$p['os_path'] = $arr['os_path'];
|
$p['os_path'] = $arr['os_path'];
|
||||||
$p['os_syspath'] = ((array_key_exists('os_syspath',$arr)) ? $arr['os_syspath'] : '');
|
$p['os_syspath'] = ((array_key_exists('os_syspath',$arr)) ? $arr['os_syspath'] : '');
|
||||||
$p['display_path'] = (($arr['display_path']) ? $arr['display_path'] : '');
|
$p['display_path'] = (($arr['display_path']) ? $arr['display_path'] : '');
|
||||||
|
$p['width'] = (($arr['width']) ? $arr['width'] : $this->getWidth());
|
||||||
|
$p['height'] = (($arr['height']) ? $arr['height'] : $this->getHeight());
|
||||||
|
|
||||||
if(! intval($p['imgscale']))
|
if(! intval($p['imgscale']))
|
||||||
logger('save: ' . print_r($arr,true), LOGGER_DATA);
|
logger('save: ' . print_r($arr,true), LOGGER_DATA);
|
||||||
@ -378,8 +385,8 @@ abstract class photo_driver {
|
|||||||
dbesc(basename($p['filename'])),
|
dbesc(basename($p['filename'])),
|
||||||
dbesc($this->getType()),
|
dbesc($this->getType()),
|
||||||
dbesc($p['album']),
|
dbesc($p['album']),
|
||||||
intval($this->getHeight()),
|
intval($p['height']),
|
||||||
intval($this->getWidth()),
|
intval($p['width']),
|
||||||
(intval($p['os_storage']) ? dbescbin($p['os_syspath']) : dbescbin($this->imageString())),
|
(intval($p['os_storage']) ? dbescbin($p['os_syspath']) : dbescbin($this->imageString())),
|
||||||
intval($p['os_storage']),
|
intval($p['os_storage']),
|
||||||
intval(strlen($this->imageString())),
|
intval(strlen($this->imageString())),
|
||||||
@ -409,8 +416,8 @@ abstract class photo_driver {
|
|||||||
dbesc(basename($p['filename'])),
|
dbesc(basename($p['filename'])),
|
||||||
dbesc($this->getType()),
|
dbesc($this->getType()),
|
||||||
dbesc($p['album']),
|
dbesc($p['album']),
|
||||||
intval($this->getHeight()),
|
intval($p['height']),
|
||||||
intval($this->getWidth()),
|
intval($p['width']),
|
||||||
(intval($p['os_storage']) ? dbescbin($p['os_syspath']) : dbescbin($this->imageString())),
|
(intval($p['os_storage']) ? dbescbin($p['os_syspath']) : dbescbin($this->imageString())),
|
||||||
intval($p['os_storage']),
|
intval($p['os_storage']),
|
||||||
intval(strlen($this->imageString())),
|
intval(strlen($this->imageString())),
|
||||||
@ -426,6 +433,7 @@ abstract class photo_driver {
|
|||||||
dbesc($p['deny_gid'])
|
dbesc($p['deny_gid'])
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
logger('photo save ' . $p['imgscale'] . ' returned ' . intval($r));
|
||||||
return $r;
|
return $r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,27 +62,52 @@ function photo_upload($channel, $observer, $args) {
|
|||||||
|
|
||||||
$ac = $acl->get();
|
$ac = $acl->get();
|
||||||
|
|
||||||
|
$width = $height = 0;
|
||||||
|
|
||||||
|
if($args['getimagesize']) {
|
||||||
|
$width = $args['getimagesize'][0];
|
||||||
|
$height = $args['getimagesize'][1];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
$os_storage = 0;
|
$os_storage = 0;
|
||||||
|
|
||||||
|
$max_thumb = get_config('system','max_thumbnail',1600);
|
||||||
|
|
||||||
if($args['os_syspath'] && $args['getimagesize']) {
|
if($args['os_syspath'] && $args['getimagesize']) {
|
||||||
if($args['getimagesize'][0] > 1600 || $args['getimagesize'][1] > 1600) {
|
if($args['getimagesize'][0] > $max_thumb || $args['getimagesize'][1] > $max_thumb) {
|
||||||
$imagick_path = get_config('system','imagick_convert_path');
|
$imagick_path = get_config('system','imagick_convert_path');
|
||||||
if($imagick_path && @file_exists($imagick_path)) {
|
if($imagick_path && @file_exists($imagick_path)) {
|
||||||
$tmp_name = $args['os_syspath'] . '-001';
|
$tmp_name = $args['os_syspath'] . '-001';
|
||||||
$newsize = photo_calculate_1600_scale($args['getimagesize']);
|
$newsize = photo_calculate_scale(array_merge($args['getimagesize'],['max' => $max_thumb]));
|
||||||
exec($imagick_path . ' ' . $args['os_syspath'] . ' -resize ' . $newsize . '^ ' . $tmp_name);
|
$cmd = $imagick_path . ' ' . escapeshellarg(PROJECT_BASE . '/' . $args['os_syspath']) . ' -thumbnail ' . $newsize . ' ' . escapeshellarg(PROJECT_BASE . '/' . $tmp_name);
|
||||||
|
// logger('imagick thumbnail command: ' . $cmd);
|
||||||
|
for($x = 0; $x < 4; $x ++) {
|
||||||
|
exec($cmd);
|
||||||
|
if(! file_exists($tmp_name)) {
|
||||||
|
logger('imagick scale failed. Retrying.');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(! file_exists($tmp_name)) {
|
||||||
|
logger('imagick scale failed. Abort.');
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
$imagedata = @file_get_contents($tmp_name);
|
$imagedata = @file_get_contents($tmp_name);
|
||||||
|
$filesize = @filesize($args['os_syspath']);
|
||||||
@unlink($tmp_name);
|
@unlink($tmp_name);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$imagedata = @file_get_contents($args['os_syspath']);
|
$imagedata = @file_get_contents($args['os_syspath']);
|
||||||
|
$filesize = strlen($imagedata);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$imagedata = @file_get_contents($args['os_syspath']);
|
$imagedata = @file_get_contents($args['os_syspath']);
|
||||||
|
$filesize = strlen($imagedata);
|
||||||
}
|
}
|
||||||
$filename = $args['filename'];
|
$filename = $args['filename'];
|
||||||
$filesize = strlen($imagedata);
|
|
||||||
// this is going to be deleted if it exists
|
// this is going to be deleted if it exists
|
||||||
$src = '/tmp/deletemenow';
|
$src = '/tmp/deletemenow';
|
||||||
$type = $args['getimagesize']['mime'];
|
$type = $args['getimagesize']['mime'];
|
||||||
@ -188,7 +213,9 @@ function photo_upload($channel, $observer, $args) {
|
|||||||
if ($max_length > 0)
|
if ($max_length > 0)
|
||||||
$ph->scaleImage($max_length);
|
$ph->scaleImage($max_length);
|
||||||
|
|
||||||
|
if(! $width)
|
||||||
$width = $ph->getWidth();
|
$width = $ph->getWidth();
|
||||||
|
if(! $height)
|
||||||
$height = $ph->getHeight();
|
$height = $ph->getHeight();
|
||||||
|
|
||||||
$smallest = 0;
|
$smallest = 0;
|
||||||
@ -203,6 +230,7 @@ function photo_upload($channel, $observer, $args) {
|
|||||||
|
|
||||||
$p = array('aid' => $account_id, 'uid' => $channel_id, 'xchan' => $visitor, 'resource_id' => $photo_hash,
|
$p = array('aid' => $account_id, 'uid' => $channel_id, 'xchan' => $visitor, 'resource_id' => $photo_hash,
|
||||||
'filename' => $filename, 'album' => $album, 'imgscale' => 0, 'photo_usage' => PHOTO_NORMAL,
|
'filename' => $filename, 'album' => $album, 'imgscale' => 0, 'photo_usage' => PHOTO_NORMAL,
|
||||||
|
'width' => $width, 'height' => $height,
|
||||||
'allow_cid' => $ac['allow_cid'], 'allow_gid' => $ac['allow_gid'],
|
'allow_cid' => $ac['allow_cid'], 'allow_gid' => $ac['allow_gid'],
|
||||||
'deny_cid' => $ac['deny_cid'], 'deny_gid' => $ac['deny_gid'],
|
'deny_cid' => $ac['deny_cid'], 'deny_gid' => $ac['deny_gid'],
|
||||||
'os_storage' => $os_storage, 'os_syspath' => $args['os_syspath'],
|
'os_storage' => $os_storage, 'os_syspath' => $args['os_syspath'],
|
||||||
@ -224,14 +252,16 @@ function photo_upload($channel, $observer, $args) {
|
|||||||
'rel' => 'alternate',
|
'rel' => 'alternate',
|
||||||
'type' => 'text/html',
|
'type' => 'text/html',
|
||||||
'href' => z_root() . '/photo/' . $photo_hash . '-0.' . $ph->getExt(),
|
'href' => z_root() . '/photo/' . $photo_hash . '-0.' . $ph->getExt(),
|
||||||
'width' => $ph->getWidth(),
|
'width' => $width,
|
||||||
'height' => $ph->getHeight()
|
'height' => $height
|
||||||
);
|
);
|
||||||
if(! $r0)
|
if(! $r0)
|
||||||
$errors = true;
|
$errors = true;
|
||||||
|
|
||||||
unset($p['os_storage']);
|
unset($p['os_storage']);
|
||||||
unset($p['os_syspath']);
|
unset($p['os_syspath']);
|
||||||
|
unset($p['width']);
|
||||||
|
unset($p['height']);
|
||||||
|
|
||||||
if(($width > 1024 || $height > 1024) && (! $errors))
|
if(($width > 1024 || $height > 1024) && (! $errors))
|
||||||
$ph->scaleImage(1024);
|
$ph->scaleImage(1024);
|
||||||
@ -462,9 +492,9 @@ function photo_upload($channel, $observer, $args) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function photo_calculate_1600_scale($arr) {
|
function photo_calculate_scale($arr) {
|
||||||
|
|
||||||
$max = 1600;
|
$max = $arr['max'];
|
||||||
$width = $arr[0];
|
$width = $arr[0];
|
||||||
$height = $arr[1];
|
$height = $arr[1];
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user