これは、スタッフが製品画像をアップロードできるようにするために使用する関数であり、フルサイズの画像と2つの小さい画像をアップロードします(ここでは1つのコードのみをtn_バージョンに含めました)。それは私のコントローラーにあり、複数の場所から呼び出すことができるので、それが行う値を取ります。$ controlは、使用しているfileUploadコントロールの名前、$ pathは保存パス、$ imageNameはコントロールからの名前であり、サイズを使用すると、作成するバージョンを指定できます。私の場合は、medとtnのすべてを受け取ります。オプションとして。必要な数だけ作成することも、少なくすることもできます。VDPが述べたように、設定を変更しない場合は2 MB未満に制限されますが、それは私にとっては問題ないので、それを超えるとエラーが返されます。
ところで、CIイメージアップロードライブラリはまったく使用していません。通常のファイルアップロードとajaxを介してコントローラーに送信されます。メインビューでiframeを使用して、エラーまたは成功を表示します。
コントローラーのアップロード機能:
function doUpload($control, $path, $imageName, $sizes)
{
if( ! isset($_FILES[$control]) || ! is_uploaded_file($_FILES[$control]['tmp_name']))
{
print('No file was chosen');
return FALSE;
}
if($_FILES[$control]['size']>2048000)
{
print('File is too large ('.round(($_FILES[$control]["size"]/1000)).'kb), please choose a file under 2,048kb');
return FALSE;
}
if($_FILES[$control]['error'] !== UPLOAD_ERR_OK)
{
print('Upload failed. Error code: '.$_FILES[$control]['error']);
Return FALSE;
}
switch(strtolower($_FILES[$control]['type']))
{
case 'image/jpeg':
$image = imagecreatefromjpeg($_FILES[$control]['tmp_name']);
move_uploaded_file($_FILES[$control]["tmp_name"],$path.$imageName);
break;
case 'image/png':
$image = imagecreatefrompng($_FILES[$control]['tmp_name']);
move_uploaded_file($_FILES[$control]["tmp_name"],$path.$imageName);
break;
case 'image/gif':
$image = imagecreatefromgif($_FILES[$control]['tmp_name']);
move_uploaded_file($_FILES[$control]["tmp_name"],$path.$imageName);
break;
default:
print('This file type is not allowed');
return false;
}
@unlink($_FILES[$control]['tmp_name']);
$old_width = imagesx($image);
$old_height = imagesy($image);
//Create tn version
if($sizes=='tn' || $sizes=='all')
{
$max_width = 100;
$max_height = 100;
$scale = min($max_width/$old_width, $max_height/$old_height);
if ($old_width > 100 || $old_height > 100)
{
$new_width = ceil($scale*$old_width);
$new_height = ceil($scale*$old_height);
} else {
$new_width = $old_width;
$new_height = $old_height;
}
$new = imagecreatetruecolor($new_width, $new_height);
imagecopyresampled($new, $image,0, 0, 0, 0,$new_width, $new_height, $old_width, $old_height);
switch(strtolower($_FILES[$control]['type']))
{
case 'image/jpeg':
imagejpeg($new, $path.'tn_'.$imageName, 90);
break;
case 'image/png':
imagealphablending($new, false);
imagecopyresampled($new, $image,0, 0, 0, 0,$new_width, $new_height, $old_width, $old_height);
imagesavealpha($new, true);
imagepng($new, $path.'tn_'.$imageName, 0);
break;
case 'image/gif':
imagegif($new, $path.'tn_'.$imageName);
break;
default:
}
}
imagedestroy($image);
imagedestroy($new);
print '<div style="font-family:arial;"><b>'.$imageName.'</b> Uploaded successfully. Size: '.round($_FILES[$control]['size']/1000).'kb</div>';
}
HTMLを表示:
echo '<input type="file" name="manuLogoUpload" id="manuLogoUpload" onchange="return ajaxFileUpload2(this);"/>';
ajax呼び出しを表示する:
function ajaxFileUpload2(upload_field)
{
var re_text = /\.jpg|\.gif|\.jpeg|\.png/i;
var filename = upload_field.value;
var imagename = filename.replace("C:\\fakepath\\","");
if (filename.search(re_text) == -1)
{
alert("File must be an image");
upload_field.form.reset();
return false;
}
upload_field.form.action = "addManufacturerLogo";
upload_field.form.target = "upload_iframe";
upload_field.form.submit();
upload_field.form.action = "";
upload_field.form.target = "";
document.getElementById("logoFileName").value = imagename;
document.getElementById("logoFileName1").value = imagename;
document.getElementById("manuLogoText").style.display="block";
document.getElementById("logoLink").style.display="none";
$.prettyPhoto.close();
return true;
}
通常のコントローラー機能:
function addManufacturerLogo()
{
$control = 'manuLogoUpload';
$image = $_FILES[$control]['name'];
if($imageName = $this->doUpload($control,LOGO_PATH,$image,'all'))
{
} else {
}
}
config / constants.php<<LOGO_PATHの場合。目的に合わせてこれら(および名前)を変更してください。その理由は、画像を保存したい場所を変更した場合、アプリケーション全体で10箇所ではなく、定数で変更するためです。
define('LOGO_PATH',APPPATH.'assets/images/manulogos/');
define('PROD_IMAGE_PATH',APPPATH.'../assets/images/prod_images/');