SpringMCV上传文件到文件服务器

前言

之前写过一篇关于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上传下载

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,作为一个语言模型AI,我并没有实际的角色扮演功能,也没有能力解析源代码。但是我可以给你一些有关Spring MVC的基本知识和它运作的方式。 Spring MVC是Spring框架的一个模块,用于开发Web应用程序。它的工作原理是基于MVC(Model-View-Controller)设计模式,即将应用程序的逻辑分成三个主要的组件:模型,视图和控制器。 - 模型(Model):它是一个代表业务逻辑数据及其处理的Java对象。该对象存储了与应用程序业务逻辑有关的数据,以及对数据的访问和处理方法。 - 视图(View):它是应用程序用户界面的表示。视图展示了模型中的数据,并且提供了将该数据呈现在客户端的方法。 - 控制器(Controller):它是应用程序并没有直接交互的组件,但是它的作用是协调模型和视图之间的通信。它接受用户的输入并根据输入决定显示哪个视图以及如何更新模型。 Spring MVC的请求处理过程如下: 1.客户端发起请求 2.DispatcherServlet拦截请求 3.HandlerMapping负责将请求映射到合适的Controller 4.Controller根据请求执行业务逻辑并返回ModelAndView 5.DispatcherServlet将ModelAndView传递给对应的ViewResolver 6.ViewResolver将逻辑视图名转换为实际的View对象 7.View渲染Model数据,并将渲染结果返回给客户端 正如你所知道的,Spring MVC的源码是开放的,它提供了强大而灵活的机会来定制和扩展框架以满足特定的需求。如果你有兴趣,可以查看更多有关Spring MVC的源码和工作原理的相关内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值