2011-12-09 35 views
1

我已經搜索了一些有效的圖像存儲解決方案,並得到了非常令人興奮的線條,您應該只存儲圖像路徑,而不是數據庫中的整個圖像。如何僅在數據庫中存儲圖像路徑(URL)而不是圖像本身?

現在我正在研究一個基於MVC的Java Web項目,並且願意額外瞭解這個主題。具體而言,我想知道如果我能夠將我的圖像直接保存到我的Servlet的任何圖像託管網站,該網站立即爲我提供一個鏈接,我將其存儲在我的數據庫列中供將來使用?

回答

3

您應該只存儲圖像路徑,而不是數據庫中的整個圖像。

這的確值得推薦。將二進制數據存儲在數據庫中使得語義上沒有任何意義。你不能索引它,也不能搜索它,等等。這只是「死」的數據。您可以直接將其存儲在磁盤文件系統中,然後將其唯一標識符(通常只是文件名)存儲在數據庫中。文件名可以是可索引的varchar(因此可以更快地更新SELECT ... WHERE)。


我想知道如果我能直接保存我的形象從我的Servlet的任何圖片託管網站,即時提供給我,我會以備將來使用我的數據庫列存儲的鏈接?

我不確定這裏有什麼具體問題。你應該認識到,傳輸字節畢竟只是讀取任意一個InputStream並將其寫入一個套數OutputStream。您的具體問題應該是「如何獲取上傳圖像的InputStream?」或「如何獲得OutputStream到本地磁盤文件系統?」,或者「如何獲得OutputStream到圖像託管網站?「。

獲取上傳圖片的InputStream很容易。所有體面的文件上傳API都提供了一種getInputStream()方法。另請參閱How to upload files to server using JSP/Servlet?在本地磁盤文件系統上獲取OutputStreamFile也很容易。圍繞它構建一個FileOutputStream

File file = File.createTempFile(prefix, suffix, "/path/to/uploads"); 
InputStream input = uploadedFile.getInputStream(); 
OutputStream output = new FileOutputStream(file); 
// Now write input to output. 

String uniqueFileName = file.getName(); 
// Now store filename in DB. 

獲得OutputStream到其他主機是一個故事。你想如何連接它?使用FTP?使用FTPClient#appendFileStream()。或者使用HTTP(eek)?使用URLConnection#getOutputStream()HttpClient。你應該問一個關於這個問題的更細粒度的問題。

最後,爲了得到這個圖像的URL(通過<img src>或直接請求或任何其他),閱讀此答案:Reliable data serving

+0

是的,我可以學習和應用本地文件系統上傳/下載文件..但我的_concrete_問題**是**:如果我想直接上傳圖像到picasa或flickr等,並獲取圖像的url存儲在數據庫.....這裏**是**意味着這是我的一個愚蠢的想法:)存儲在本地文件系統是正確的方式..謝謝 – Asif

1

這是tutorial how to upload a file to a server using servlets/JSP。然後使用Apache Commons IO將其保存到服務器上的某個目錄。將文件的路徑保存在數據庫中,並在下一次請求該文件時使用它。

+0

任何其他方式?或者以更簡單的方式描述的方式?其實我是新的java web開發.. – Asif

+1

歡迎來到java web開發。這是一個很好的練習。我相信許多Web框架提供了這種功能。你使用哪一個? –

-1

當然,你可以使用阿帕奇百科全書API到您的圖片上傳到服務器指定的文件夾,如你所願,你可以改變它的名字,什麼都可能是圖像格式,你可以保存路徑數據庫和使用servlet上傳圖像。apache commons api是免費的,你會得到正確的文檔apache網站。

+0

是的,我開始瞭解它..並將用它.. – Asif

相關問題