前言
之前写过一篇关于SSM文件上传下载的文章,描述的是基于当前服务器的文件上传。随着一个系统业务不断增加,以及访问量很大的情况下,在同一个服务器中做数据存储读取、文件存储读取等显得不是那么的合适,很容以影响服务器的性能。如何解决这个问题是今天的主题。
一、思路
随着一个系统业务不断增加,服务器要存储的内容除了数据以外,还有文件,视频,音频,图片等。这些内容很明显是不建议存储到数据库中的,容易拉低数据库的性能。能不能有一个专门的服务器,来存放文件这些内容,那这个服务器就是文件存储服务器。(市面上已知的文件存储数据库有MongoDB,一个分布式的文件存储数据库)
核心的业务逻辑部署在一台服务器中,数据库部署在一台服务器中,文件存储系统部署在一台服务器中。需要查询数据,就从数据库的服务器中获取,需要文件上传下载就在文件存储系统服务器中操作。
二、搭建环境(Maven环境)
(一)搭建核心业务环境
1、先导包,这里只导入文件上传所需要依赖,SSM依赖可以参照SSM文件上传下载
<!--文件上传-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<!--文件上传远程服务器使用-->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.19.4</version>
</dependency>
2、编写Controller
@RequestMapping(path="/upload", method = RequestMethod.POST)
public String upload(@RequestParam MultipartFile file) throws Exception {
// 获取文件名
String filename = file.getOriginalFilename();
// 为了实现同一个文件可以重复上传,这里通过UUID修改文件名
String suffix = UUID.randomUUID().toString().replace("-", "");
filename = suffix + filename;
// 客户端
Client client = Client.create();
// 文件服务器地址,img为服务器上存储图片的地址
String uploadServerPath = "http://localhost:9090/FileServer/img/" + filename;
// 使用客户端创建连接
WebResource resource = client.resource(uploadServerPath);
// 把要上传的文件添加到连接中
resource.put(file.getBytes());
return "success.jsp";
}
3、编写jsp页面
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
核心业务,文件上传
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="提交">
</form>
</body>
</html>
success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
上传成功
</body>
</html>
(二)搭建文件服务器
1、修改tomcat中的\apache-tomcat-9.0.27\conf\web.xml
大概在119行
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<!--配置文件上传-->
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
2、直接创建web工程即可,工程发布成功之后,在tomcat所在目录创建img文件夹
三、测试
浏览器输入地址,测试文件服务器启动成功
核心业务服务器启动成功
选择一头凶猛的小狗提交文件
最后查看文件服务器,刚才上传的图片已经成功了。
四、总结
这个例子演示了文件上传到文件服务器,并不代表真正的开发过程中就是这么实现的。实现功能的方式有很多,技术只是实现功能的一种手段,核心的内容还是思想。通过技术把优秀的思想实现,这才是核心。图片可以上传,文件也可以,参照SpringMVC操作Excel上传下载