2012-12-29 36 views
4

我使用Tomcat作爲web服務器編碼Spring MVC 3.0應用程序。春季MVC上傳圖片到服務器並在mysql數據庫中存儲引用

我們的要求是讓用戶上傳圖片。我正在考慮將此映像存儲在磁盤文件系統中,並將參考路徑存儲在MySQL中,而不是將所有文件信息作爲BLOB存儲在MySQL數據庫中(我被告知在MySQL中存儲不是最佳實踐)。

任何人都可以推薦如何在Spring MVC中做到這一點?

乾杯

+1

你想使用其他一些框架嗎?休眠?速度? JSP?你的問題太籠統了。請讓我們知道你已經做了什麼。給我們一些代碼片段。沒有人會爲你做研究或編寫整個功能。 –

+0

沒有單一的解決方案,它取決於當前和未來的要求。如果您使用數據庫存儲圖像,則可以在沒有任何問題的情況下對應用程序進行集羣(負載變大時)。雖然會引入一些數據庫維護困難。 –

+0

如果您可以管理和使用加載的數據,那麼這可能是最佳做法。隨着文件系統,它似乎將是一個大問題。 –

回答

12

存儲在磁盤和存儲在MySQL有其注意事項。 Here是很好的討論。

要將其存儲在文件系統中,您可以使用Commons File Upload。下面是一個示例

的pom.xml

 <dependency> 
     <groupId>commons-fileupload</groupId> 
     <artifactId>commons-fileupload</artifactId> 
     <version>${release.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>commons-io</groupId> 
     <artifactId>commons-io</artifactId> 
     <version>${release.version}</version> 
    </dependency> 

JSP

<h2>Spring MVC file upload example</h2> 

<form method="POST" action="<c:url value='/upload' />" 
    enctype="multipart/form-data"> 


    Please select a file to upload : <input type="file" name="file" /> 
    <input type="submit" value="upload" /> 

</form> 

控制器

@RequestMapping(value = "/upload", method = RequestMethod.POST) 
public String handleFormUpload( 
    @RequestParam("file") MultipartFile file) throws IOException{ 
if (!file.isEmpty()) { 
BufferedImage src = ImageIO.read(new ByteArrayInputStream(file.getBytes())); 
File destination = new File("File directory with file name") // something like C:/Users/tom/Documents/nameBasedOnSomeId.png 
ImageIO.write(src, "png", destination); 
//Save the id you have used to create the file name in the DB. You can retrieve the image in future with the ID. 
} 
} 

並限定第是在你的應用上下文

<bean id="multipartResolver" 
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 

我希望這可以幫助。

+0

但是,當您將文件保存在C:/ userDir中時,只需從該計算機打開Web應用程序即可找到該圖像。或者我在這裏錯過了什麼?在管理員通過圖片添加新產品的網上商店應用中,每個客戶都必須看到圖片。在這種情況下,我不需要在DB中保存圖像嗎? – akcasoy

+0

當我說c:/ userDir時,我是指服務器中的文件夾,而不是本地機器中的文件夾。關於在哪裏存儲(在機器或數據庫上)完全是另一個要討論的話題。你可以在SO上找到很多帖子。 – shazinltc

相關問題