在spring MVC中将图像上传到服务器并将参考存储在mysql数据库中[关闭]

Posted

技术标签:

【中文标题】在spring MVC中将图像上传到服务器并将参考存储在mysql数据库中[关闭]【英文标题】:uploading images to server in spring MVC and storing reference in mysql database [closed] 【发布时间】:2012-12-14 15:55:14 【问题描述】:

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

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

谁能推荐如何在 Spring MVC 中做到这一点?

干杯

【问题讨论】:

你想使用其他一些框架吗?休眠?速度? JSP?你的问题太笼统了。请让我们知道你已经做了什么。给我们一些代码sn-ps。没有人会为您进行研究或编写整个功能。 没有单一的解决方案,这取决于当前和未来的需求。如果您使用数据库来存储图像,您可以毫无问题地集群您的应用程序(当负载变高时)。虽然会引入一些数据库维护困难。 如果您可以管理和利用加载的数据,这可能是最佳实践。对于文件系统,这似乎是个大问题。 【参考方案1】:

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

我希望这会有所帮助。

【讨论】:

但是当你将文件保存在 C:/userDir 时,这个图像只能在从这台计算机打开 webapp 时找到。或者我想念这里吗?在管理员使用图像添加新产品的网上商店应用中,图像必须对每个客户可见。在这种情况下我不必将图像保存在数据库中吗? 当我说 c:/userDir 时,我指的是服务器中的文件夹,而不是本地机器中的文件夹。关于存储位置(在机器上或数据库上)完全是另一个需要讨论的话题。你可以在上面找到很多关于 SO 的帖子。

以上是关于在spring MVC中将图像上传到服务器并将参考存储在mysql数据库中[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

将spring mvc中的图像永久上传到其他位置

如何在单个事务中将图像上传到 Firebase 存储并在数据库中保存参考?

如何在ios中将图像上传到服务器?

在 Spring MVC 中使用 JavaScript 上传图像以进行预览

如何使用角度和 Spring MVC 提供静态图像?

java spring mvc 客户端上传文件到服务器端