2015-06-20 59 views
0

我想從客戶產品頁面上傳圖片(上傳文件選項),圖像上傳到system/upload文件夾,並用filename + md5哈希字符串重命名。所以,比如我上傳image.jpg,這個文件就會上傳到system/upload/image.jpg.392da1267fbfa4be65f7859bb0b974d9查看圖像上傳者客戶

現在我想看到客戶從管理頁面(我創建了一個新的模塊頁面)上傳的圖像,如何調整和顯示圖像文件?我可以從數據庫中的表oc_upload獲取文件名,但物理文件使用的是沒有擴展名的修改名稱,我無法調整此文件的大小,因爲它位於system/upload文件夾中,並且其擴展名已更改。圖像調整大小工具只能調整image文件夾中的圖像,並在「設置」頁面中配置一些允許的擴展名。

任何想法如何顯示客戶上傳的圖像?我是否需要使用其原始名稱將重命名的上傳文件複製到image文件夾,然後調整大小並顯示它?我很欣賞你的任何想法。謝謝。

+0

我不明白你爲什麼要調整文件本身的大小。你可以在標籤上使用CSS屬性的寬度和高度,不是嗎? –

+0

調整大小以生成圖像的縮略圖。 – Eaton

回答

0

剛剛通過將中的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; 
     } 
    }