對於網站上傳的圖片,圖片被上傳到伺服器中後,我們怎麼去記錄每個上傳的圖片檔案的儲存的地址呢?
比如:使用者上傳的映像,相簿,商品圖片等等,這些上傳的圖片我們怎麼去記錄其所在地址呢?
1:比如使用者表有個 avatar 欄位,使用者上傳圖片後,然後把形如: http://www.thinkphp.cn/Uploads/da/2015-08-05/55c18ef67e249.jpg 這樣的圖片url存入 avatar 欄位嗎? 還是只存圖片名稱,或者拆分為三段 網域名稱/路徑/名稱 存入三個欄位?
2:還有使用者相簿,使用者上傳很多圖片,這個怎麼將圖片的url儲存在資料庫中呢?
3:還有DZ論壇中一篇文章內容中可能包含很多圖片,這個怎麼存呢,還是要單獨建一個圖片附件表格,然後與文章ID關聯?
4:如果使用的是雲端儲存呢,比如七牛和又拍雲,使用它們的介面上傳後,也是會給你返回一個圖片url的嗎?那麼我們也像上面那樣將返回的圖片url儲存在資料庫中嗎?
既然網站很多地方都使用了圖片上傳功能,每個被上傳的圖片在伺服器中的位置都需要被記錄下來,那我們何不專門建立一張表來儲存所有上傳的圖片url呢?
我想到的最簡單的這個表的設計:imgup(id, url)
就這樣簡單,所有上傳的圖片資訊都在這裡記錄,比如原先使用者表中的 avatar 儲存的是映像的url,現在就可以儲存這個對應id就可以了,這樣就簡單多了,商品圖片,文章內容圖片,……,都同理。
但是我總覺得這樣太簡單了,過於不妥,這個表到底怎樣設計最合理呢?需不需要加片的一些其它資訊呢,比如在用戶端被上傳前的原始名稱,圖片大小,圖片尺寸,圖片建立時間,圖片修改時間,圖片EXIF資訊,……等等。
沒有看過DZ的代碼,文章中可以看到每個附件圖片和其它檔案,並能控制許可權讓使用者下載,不知道它那個是怎麼做的。
這個問題被延伸到網站【檔案上傳】上面就不局限於圖片了,所有上傳的檔案資訊都放在這個 記錄上傳檔案資訊 的表裡面,那就方便多了,管理也方便,所以這個問題我想了很久,就是沒有經驗,所以先來請教下各位大神。
希望有經驗的大神們不吝賜教,指點迷津,我當沒齒難忘,謝謝!
回複內容:
對於網站上傳的圖片,圖片被上傳到伺服器中後,我們怎麼去記錄每個上傳的圖片檔案的儲存的地址呢?
比如:使用者上傳的映像,相簿,商品圖片等等,這些上傳的圖片我們怎麼去記錄其所在地址呢?
1:比如使用者表有個 avatar 欄位,使用者上傳圖片後,然後把形如: http://www.thinkphp.cn/Uploads/da/2015-08-05/55c18ef67e249.jpg 這樣的圖片url存入 avatar 欄位嗎? 還是只存圖片名稱,或者拆分為三段 網域名稱/路徑/名稱 存入三個欄位?
2:還有使用者相簿,使用者上傳很多圖片,這個怎麼將圖片的url儲存在資料庫中呢?
3:還有DZ論壇中一篇文章內容中可能包含很多圖片,這個怎麼存呢,還是要單獨建一個圖片附件表格,然後與文章ID關聯?
4:如果使用的是雲端儲存呢,比如七牛和又拍雲,使用它們的介面上傳後,也是會給你返回一個圖片url的嗎?那麼我們也像上面那樣將返回的圖片url儲存在資料庫中嗎?
既然網站很多地方都使用了圖片上傳功能,每個被上傳的圖片在伺服器中的位置都需要被記錄下來,那我們何不專門建立一張表來儲存所有上傳的圖片url呢?
我想到的最簡單的這個表的設計:imgup(id, url)
就這樣簡單,所有上傳的圖片資訊都在這裡記錄,比如原先使用者表中的 avatar 儲存的是映像的url,現在就可以儲存這個對應id就可以了,這樣就簡單多了,商品圖片,文章內容圖片,……,都同理。
但是我總覺得這樣太簡單了,過於不妥,這個表到底怎樣設計最合理呢?需不需要加片的一些其它資訊呢,比如在用戶端被上傳前的原始名稱,圖片大小,圖片尺寸,圖片建立時間,圖片修改時間,圖片EXIF資訊,……等等。
沒有看過DZ的代碼,文章中可以看到每個附件圖片和其它檔案,並能控制許可權讓使用者下載,不知道它那個是怎麼做的。
這個問題被延伸到網站【檔案上傳】上面就不局限於圖片了,所有上傳的檔案資訊都放在這個 記錄上傳檔案資訊 的表裡面,那就方便多了,管理也方便,所以這個問題我想了很久,就是沒有經驗,所以先來請教下各位大神。
希望有經驗的大神們不吝賜教,指點迷津,我當沒齒難忘,謝謝!
沒人回答嗎?
1.UPYUN的外鏈為形式:http://<空間名>.b0.upaiyun.com/<檔案路徑>
#<檔案路徑>可以自己去定義,可以參考save-key 詳細說明
2.可以參考官方的SDK
3.DZ官方有外掛程式你可以看看[DZ]
4.同2
我現在也在做類似平台,我採用的方式是使用nodejs來處理所有檔案的請求。命名方式採用uid/year-month/hash 。七牛的話,看你的是不是私密空間了,如果不是則直接根據bucket的網域名稱拼接就行。如果是私密空間,可用sdk擷取檔案臨時下載地址。手機打的,說得有點亂,見諒