<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                GridFS是MongoDB的一個內置功能,它提供一組文件操作的API以利用MongoDB存儲文件,GridFS的基本原理是將文件保存在兩個Collection中,一個保存文件索引,一個保存文件內容,文件內容按一定大小分成若干塊,每一塊存在一個Document中,這種方法不僅提供了文件存儲,還提供了對文件相關的一些附加屬性(比如MD5值,文件名等等)的存儲。 初始化gridfs $conn=newMongo();//連接MongoDB $db=$conn->photos;//選擇數據庫 $collection=$db->getGridFS();//取得gridfs對象 gridfs有三種方式存儲文件 第一種直接存儲文件 $id=$collection->storeFile("./logo.png"); 第二種存儲文件二進制流 $data=get\_file\_contents("./logo.png"); $id=$collection->storeBytes($data,array("param"=>'附加參數將隨圖片一起存入')); 第三種保存直接表單提交的文件$\_FILES $id=$collection->storeUpload('upfile'); 相當于 $id=$collection->storeFile($\_FILES\['upfile'\]\['tmp\_name'\]); //--------------以上是保存圖片--下面開始讀取圖片---------------- 保存成功后返回$id = md5字符串 $logo=$collection->findOne(array('\_id'=>$id));// 以\_id為索引取得文件 header('Content-type:image/png');//輸出圖片頭 echo$logo->getBytes();//輸出數據流 ?> **特別備注:** 通過$id = $collection->storeFile($\_FILES\['upfile'\]\['tmp\_name'\]);產生的ID,是MongoDB的ID對象,而不是一個字符串!如以下格式: { "\_id": ObjectId("525418525ba8a18c1b000001"), "filename":"D:\\\\php\\\\xampp\\\\tmp\\\\php8116.tmp", "uploadDate": ISODate("2013-10-08T14:36:02.0Z"), "length": NumberInt(55862), "chunkSize": NumberInt(262144), "md5":"a6f19f3434f0b36bb2611cd4c6d82b35" } 不過,我們可以通過$id = strval($id),把上述ID對象字符串化,如可得到上述的525418525ba8a18c1b000001值,再把這個值存到MySQL數據庫中,到時候可通過這個 字符串ID 作為條件,找到相應的MongoDB資源。參考代碼如下: $conn=newMongo(C('127.0.0.1:27017'));//如果設置了密碼自己配置DSN $db=$conn->selectDB('edu\_sns');// 選擇數據庫 $collection=$db->getGridFS('zk\_attach');//選擇集合,相等于選擇數據表 $id=$\_GET\['id'\]; $object=$collection->findOne(array('\_id'=>newMongoId($id))); header('Content-type:image/png'); echo$object->getBytes(); **最近因工作需要研究了下GridFS,并整理了個Demo出來。。分享一下經驗。。** **gfs.php文件** //連接Mongo并初始化GFS $conn=newMongo(C('127.0.0.1:27017'));//如果設置了密碼自己配置DSN $db=$conn->selectDB('edu\_sns');//選擇數據庫 $collection=$db->getGridFS('zk\_attach');//選擇集合,相等于選擇數據表 //上傳圖片 if(isset($\_FILES\['upfile'\])) { 保存新上傳的文件 $size=$\_FILES\['upfile'\]\['size'\]; $md5= md5\_file($\_FILES\['upfile'\]\['tmp\_name'\]); $exists=$collection->findOne(array('md5'=>$md5,'length'=>$size),array('md5')); if(empty($exists)) { 15$collection->storeUpload('upfile'); //或修改為如下代碼,并存入一些自定義參數 /\* $filename=$\_FILES\['upfile'\]\['name'\]; $filetype=$\_FILES\['upfile'\]\['type'\]; $tmpfilepath=$\_FILES\['upfile'\]\['tmp\_name'\]; $id=$gridfs->storeFile($tmpfilepath, array('filename' => $filename, 'filetype' => $filetype)); \*/ }else{ unlink($\_FILES\['upfile'\]\['tmp\_name'\]); } echo" 圖片路徑為: http://{$\_SERVER\['HTTP\_HOST'\]}{$\_SERVER\['REQUEST\_URI'\]}?img={$md5}"; }elseif($id=$\_GET\['img'\]) { //生成圖片 //索引圖片文件 $image=$collection->findOne(array('md5'=>$id)); //設定文檔類型,顯示圖片 $img\_bytes=$image->getBytes(); include\_once'thumb.php'; $w=is\_numeric($\_GET\['w'\]) ?intval($\_GET\['w'\]): 100; Thumb::maxWidth($img\_bytes,$w); }elseif($id=$\_GET\['del'\]) {//刪除圖片 $s=$collection->remove(array('md5'=>$id)); 43header('Location:'.$\_SERVER\['HTTP\_REFERER'\]); 44 45}else{// 圖片列表 46$cursor=$collection->find(); 47foreach($cursoras$obj) : 48echo' href="?img='.$obj->file\['md5'\] .'&w=800"> src="?img='.$obj->file\['md5'\] .'" border="0" /> .'">刪除'; 49endforeach 50; 51} 52?> **thumb.php 縮略圖文件** 001 002classThumb { 003 004/\*\* 005\* 以最大寬度縮放圖像 006\* 007\* @param string $im 圖像元數據 008\* @param float $w 最大寬度 009\*/ 010staticfunctionmaxWidth($im,$w) { 011if(empty($im) ||empty($w) || !is\_numeric($w)) { 012thrownewException("缺少必須的參數"); 013} 014$im= imagecreatefromstring($im);// 創建圖像 015list ($im\_w,$im\_h) \= self::getsize($im);// 獲取圖像寬高 016if($im\_w>$w) { 017$new\_w=$w; 018$new\_h=$w/$im\_w\*$im\_h; 019}else{ 020$new\_w=$im\_w; 021$new\_h=$im\_h; 022} 023$dst\_im= imagecreatetruecolor($new\_w,$new\_h); 024imagecopyresampled($dst\_im,$im, 0, 0, 0, 0,$new\_w,$new\_h,$im\_w,$im\_h); 025header('Content-type:image/jpeg'); 026imagepng($dst\_im); 027imagedestroy($dst\_im); 028imagedestroy($im); 029} 030 031/\*\* 032\* 以最大高度縮放圖像 033\* 034\* @param string $im 圖像元數據 035\* @param float $w 最大高度 036\*/ 037staticfunctionmaxHeight($im,$h) { 038if(empty($im) ||empty($h) || !is\_numeric($h)) { 039thrownewException("缺少必須的參數"); 040} 041$im= imagecreatefromstring($im);// 創建圖像 042list ($im\_w,$im\_h) \= self::getsize($im);// 獲取圖像寬高 043if($im\_h>$h) { 044$new\_w=$h/$im\_h\*$im\_w; 045$new\_h=$h; 046}else{ 047$new\_w=$im\_w; 048$new\_h=$im\_h; 049} 050$dst\_im= imagecreatetruecolor($new\_w,$new\_h); 051imagecopyresampled($dst\_im,$im, 0, 0, 0, 0,$new\_w,$new\_h,$im\_w,$im\_h); 052header('Content-type:image/jpeg'); 053imagepng($dst\_im); 054imagedestroy($dst\_im); 055imagedestroy($im); 056} 057 058/\*\* 059\* 生成固定大小的圖像并按比例縮放 060\* 061\* @param string $im 圖像元數據 062\* @param float $w 最大寬度 063\* @param float $h 最大高度 064\*/ 065staticfunctionfixed($im,$w,$h) { 066if(empty($im) ||empty($w) ||empty($h) || !is\_numeric($w) || !is\_numeric($h)) { 067thrownewException("缺少必須的參數"); 068} 069$im= imagecreatefromstring($im);// 創建圖像 070list ($im\_w,$im\_h) \= self::getsize($im);// 獲取圖像寬高 071if($im\_w>$im\_h||$w<$h) { 072$new\_h=intval(($w/$im\_w) \*$im\_h); 073$new\_w=$w; 074}else{ 075$new\_h=$h; 076$new\_w=intval(($h/$im\_h) \*$im\_w); 077} 078//echo "$im\_w x $im\_h $new\_w x $new\_h $x $y";exit; 079// 開始創建縮放后的圖像 080$dst\_im= imagecreatetruecolor($new\_w,$new\_h); 081imagecopyresampled($dst\_im,$im, 0, 0, 0, 0,$new\_w,$new\_h,$im\_w,$im\_h); 082header('Content-type:image/jpeg'); 083imagepng($dst\_im); 084imagedestroy($dst\_im); 085imagedestroy($im); 086} 087 088/\* 089\* 獲取圖像大小 090\* 091\* @param string $im 圖像元數據 092\* @return array 093\*/ 094protectedstaticfunctiongetsize($im) { 095returnarray( 096imagesx($im), 097imagesy($im) 098); 099} 100} 101?> **index.html HTML表單文件** 01 html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 02 03 04 charset=utf-8"/> 05Mongo Gridfs 06 07 08 09 10 11 查看圖片 12 13 14
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看