(OpenCart) 查看客户上传的图片
(OpenCart) View Images Uploaded by Customer
我正在尝试从客户产品页面上传图片(上传文件选项),图片已上传到 system/upload
文件夹并重命名为:文件名 + md5 哈希字符串。所以,比如我上传image.jpg
,文件会被上传到system/upload/image.jpg.392da1267fbfa4be65f7859bb0b974d9
.
现在我想看到客户从管理页面上传的图片(我创建了一个新的模块页面),我该如何调整和显示图片文件?我可以从数据库中的 table oc_upload
中获取文件名,但是物理文件使用的是没有扩展名的修改后的名称,我无法调整此文件的大小,因为它位于 system/upload
文件夹中并且它的扩展名被改变了。图像调整工具只能调整 image
文件夹中的图像,并在“设置”页面中配置了一些允许的扩展名。
知道如何显示客户上传的图片吗?是否需要将重命名后的上传文件按原名复制到image
文件夹,然后调整大小显示?我很欣赏你的任何想法。谢谢。
刚刚通过将 admin/model/tool/image.php
中的 resize()
方法复制到我的控制器并修改它以调整 system/upload
文件夹中的图像大小来获得解决方案。
private function resizeImageUpload($old_filename, $width, $height, $new_filename = '') {
$extension_arr = array('jpeg', 'jpg', 'png', 'gif');
$old_image = $old_filename;
if (!empty($new_filename)) {
$extension = pathinfo($new_filename, PATHINFO_EXTENSION);
$new_image = 'cache/system/upload/' . utf8_substr($new_filename, 0, utf8_strrpos($new_filename, '.')) . '-' . $width . 'x' . $height . '.' . $extension;
} else {
$extension = pathinfo($old_filename, PATHINFO_EXTENSION);
$new_image = 'cache/system/upload/' . utf8_substr($old_filename, 0, utf8_strrpos($old_filename, '.')) . '-' . $width . 'x' . $height . '.' . $extension;
}
if (!in_array($extension, $extension_arr)) return '';
if (!is_file(DIR_IMAGE . $new_image) || (filectime(DIR_UPLOAD . $old_image) > filectime(DIR_IMAGE . $new_image))) {
$path = '';
$directories = explode('/', dirname(str_replace('../', '', $new_image)));
foreach ($directories as $directory) {
$path = $path . '/' . $directory;
if (!is_dir(DIR_IMAGE . $path)) {
@mkdir(DIR_IMAGE . $path, 0777);
}
}
list($width_orig, $height_orig) = getimagesize(DIR_UPLOAD . $old_image);
if ($width_orig != $width || $height_orig != $height) {
$image = new Image(DIR_UPLOAD . $old_image);
$image->resize($width, $height);
$image->save(DIR_IMAGE . $new_image);
} else {
$success = copy(DIR_UPLOAD . $old_image, DIR_IMAGE . $new_image);
}
}
if ($this->request->server['HTTPS']) {
return HTTPS_CATALOG . 'image/' . $new_image;
} else {
return HTTP_CATALOG . 'image/' . $new_image;
}
}
我正在尝试从客户产品页面上传图片(上传文件选项),图片已上传到 system/upload
文件夹并重命名为:文件名 + md5 哈希字符串。所以,比如我上传image.jpg
,文件会被上传到system/upload/image.jpg.392da1267fbfa4be65f7859bb0b974d9
.
现在我想看到客户从管理页面上传的图片(我创建了一个新的模块页面),我该如何调整和显示图片文件?我可以从数据库中的 table oc_upload
中获取文件名,但是物理文件使用的是没有扩展名的修改后的名称,我无法调整此文件的大小,因为它位于 system/upload
文件夹中并且它的扩展名被改变了。图像调整工具只能调整 image
文件夹中的图像,并在“设置”页面中配置了一些允许的扩展名。
知道如何显示客户上传的图片吗?是否需要将重命名后的上传文件按原名复制到image
文件夹,然后调整大小显示?我很欣赏你的任何想法。谢谢。
刚刚通过将 admin/model/tool/image.php
中的 resize()
方法复制到我的控制器并修改它以调整 system/upload
文件夹中的图像大小来获得解决方案。
private function resizeImageUpload($old_filename, $width, $height, $new_filename = '') {
$extension_arr = array('jpeg', 'jpg', 'png', 'gif');
$old_image = $old_filename;
if (!empty($new_filename)) {
$extension = pathinfo($new_filename, PATHINFO_EXTENSION);
$new_image = 'cache/system/upload/' . utf8_substr($new_filename, 0, utf8_strrpos($new_filename, '.')) . '-' . $width . 'x' . $height . '.' . $extension;
} else {
$extension = pathinfo($old_filename, PATHINFO_EXTENSION);
$new_image = 'cache/system/upload/' . utf8_substr($old_filename, 0, utf8_strrpos($old_filename, '.')) . '-' . $width . 'x' . $height . '.' . $extension;
}
if (!in_array($extension, $extension_arr)) return '';
if (!is_file(DIR_IMAGE . $new_image) || (filectime(DIR_UPLOAD . $old_image) > filectime(DIR_IMAGE . $new_image))) {
$path = '';
$directories = explode('/', dirname(str_replace('../', '', $new_image)));
foreach ($directories as $directory) {
$path = $path . '/' . $directory;
if (!is_dir(DIR_IMAGE . $path)) {
@mkdir(DIR_IMAGE . $path, 0777);
}
}
list($width_orig, $height_orig) = getimagesize(DIR_UPLOAD . $old_image);
if ($width_orig != $width || $height_orig != $height) {
$image = new Image(DIR_UPLOAD . $old_image);
$image->resize($width, $height);
$image->save(DIR_IMAGE . $new_image);
} else {
$success = copy(DIR_UPLOAD . $old_image, DIR_IMAGE . $new_image);
}
}
if ($this->request->server['HTTPS']) {
return HTTPS_CATALOG . 'image/' . $new_image;
} else {
return HTTP_CATALOG . 'image/' . $new_image;
}
}