在Spring MVC中将图像上传到服务器并在mysql数据库中存储引用

时间:2012-12-29 20:12:56

标签: java mysql spring spring-mvc blob

我正在使用Tomcat编写Spring MVC 3.0应用程序作为Web服务器。

我们的要求是让用户上传图片。我想将这个图像存储在磁盘文件系统上,并将参考路径存储在MySQL中,而不是将所有文件信息存储在MySQL数据库中作为BLOB(我被告知在MySQL中存储不是最佳做法)。

任何人都可以推荐如何在Spring MVC中执行此操作吗?

干杯

1 个答案:

答案 0 :(得分:13)

存储在磁盘中并存储在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">

我希望这会有所帮助。