前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >上传文件服务与web服务分离

上传文件服务与web服务分离

作者头像
编程随笔
发布于 2019-09-11 07:53:59
发布于 2019-09-11 07:53:59
2K00
代码可运行
举报
文章被收录于专栏:后端开发随笔后端开发随笔
运行总次数:0
代码可运行

业务场景: 1. 后端服务为java web应用,使用tomcat容器,多实例集群化部署。 2. 前端使用nginx作为后端应用的反向代理。 业务需求: 现在需要在java web应用端上传文件,同时还要能支持文件下载。 设计方案: 1. 文件应该专门使用文件服务器进行存储,在数据库中存储文件下载链接即可。 2. tomcat容器本身不擅长做文件上传下载的事情,所以最好将文件上传下载的功能与web服务分离,比如使用nginx作为文件服务器。 具体实现: 通常,针对简单的应用,可以使用NFS,在web端上传文件后直接写到文件服务器;或者将文件上传到web应用之后,再将文件同步到文件服务器。 不论是通过NFS或者任何其他同步工具的方式,都存在文件中转的过程,必须先将文件通过web应用进行上传保存,再同步到文件服务器。中间可能存在同步出错或延时,也存在扩展性不好的问题。 所以,设计实现方案如下: 1. 使用http协议通过web表单方式上传文件。 2. 在文件服务器上部署web服务器,专门用于文件上传。 3. 通常在web应用中上传文件时,除了上传文件数据,还需要传递一些文字。文字保存在数据库中,文件保存在服务器上,同时将生成文件下载链接保存在数据库。 4. 通过MD5校验文件内容,避免相同文件因为文件名不同而被恶意上传导致大量垃圾文件占满磁盘空间。

结合实际的业务需求,我们的上传文件流量不是很大,所以还是直接使用tomcat作为文件上传的web服务。文件下载使用nginx。 另外,为了避免需要通过在session中保存数据带来的问题,尽量将参数保存在request进行传递。举个例子: 通常在tomcat中会将用户登录的数据保存在session中,便于进行用户合法性验证,而文件上传时请求是在文件服务器上处理,无法获取到tomcat中的session对象。 为了解决这个问题,可以将session中的数据通过request传递到页面,在文件上传时又通过参数的方式传递给文件服务器。 直接传递参数存在安全漏洞,应该将参数进行加密处理。 特别注意: 经过验证,分离web服务和文件上传服务是可行的,但是因为存在跨域问题,所以在文件上传服务中必须要设置消息头:Access-Control-Allow-Origin。 具体的Servlet代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class FileUploadServlet extends HttpServlet {
    @Override
    protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setHeader("Access-Control-Allow-Origin", "*"); //在options方法中设置跨域消息头
        super.doOptions(req, resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //处理文件上传逻辑
    }
}

【参考】 https://segmentfault.com/q/1010000007377501 站点做动静分离,如何处理用户上传文件呢? http://www.cnblogs.com/rainy-shurun/p/5407085.html 上传文件服务器与web内容服务分离 http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb学习总结(五十)——文件上传和下载 https://stackoverflow.com/questions/304268/getting-a-files-md5-checksum-in-java Getting a File's MD5 Checksum in Java

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-07-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java Web Servlet (Part D)- File Upload & Download
文件上传和下载是非常常用的功能,很多系统中都会有文件上传和下载,比如附件上传下载,用户头像上传等等
RiemannHypothesis
2022/09/26
5090
Java Web Servlet (Part D)- File Upload & Download
文件上传和下载
​ encType=multipart/form-data 表示提交的数据,以多段(每一个表单项一个数据段)的形式进行拼 接,然后以二进制流的形式发送给服务器。
上分如喝水
2021/08/16
1.3K0
文件上传和下载
ServletContext对象使用和文件下载案例
* 两种方法获取servletContext对象 * 获取MIME类型 * 设置域对象:共享数据
不愿意做鱼的小鲸鱼
2022/09/24
4290
ServletContext对象使用和文件下载案例
文件的上传与下载
此篇文章,写的内容为文件的上传和下载,先写上传下载的位置为tomcat服务器,后期在填补位置在数据库的。
栖西
2023/10/17
4450
文件的上传与下载
初学Java Web(7)——文件的上传和下载
文件上传 文件上传前的准备 在表单中必须有一个上传的控件 <input type="file" name="testImg"/> 因为 GET 方式有请求大小的限制,所以表单的提交方式必须是 POST <form action="/upload" method="post"> 表单默认的编码方式为 application/x-www-form-urlencoded ,应该修改为 multipart/form-data ,以二进制的形式进行数据的传输 <form action="/upload"
我没有三颗心脏
2018/04/26
1.4K0
初学Java Web(7)——文件的上传和下载
Servlet
Tomcat 就是一个典型的 Web 应用服务器软件,通过运行 Tomcat 服务器,我们就可以快速部署我们的 Web 项目,并交由 Tomcat 进行管理,我们只需要直接通过浏览器访问我们的项目即可。
小简
2023/01/04
1.6K0
Servlet
Java学习笔记-全栈-web开发-12-文件上传和下载
enctype作用:告知服务器请求正文的MIME类型。(请求消息头:与Content-Type作用是一致的)
devi
2021/08/18
3750
JSP的文件上传和下载
文件的上传和下载,是非常常见的功能。很多的系统中,或者软件中都经常使用文件的上传和下载。 比如:微信头像,就使用了上传。 邮箱中也有附件的上传和下载功能。
愷龍
2022/09/28
4.2K0
JSP的文件上传和下载
Java-ServletContxt对象及使用
Web容器在启动时,它会为每个Web应用程序都创建一个对应的ServletContext对象,这个对象代表当前Web应用。并且它被所有客户端共享(比如你在淘宝登陆了,那你的登陆信息会被带到很多页面,就是跳到其他页面发现也是登陆上的)。
白衣少年
2022/12/26
3500
Java-ServletContxt对象及使用
一文读懂SpringMVC中的文件上传与下载
这两天研究了一下 SpringMVC 中文件上传与下载,也遇到了一些坑,这里做个总结。
Wizey
2018/09/29
1.7K4
一文读懂SpringMVC中的文件上传与下载
文件的上传和下载
文件的上传和下载,是非常常见的功能,在很多的系统中,或者软件中都经常使用文件的上传和下载。 比如:QQ头像,就使用了上传 邮箱中也有附件的上传和下载的功能
技术交流
2022/11/18
1.4K0
文件的上传和下载
servlet就是这么简单
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
好好学java
2018/09/21
9650
servlet就是这么简单
文件的上传与下载
实时文件下载(response.getOutputStream();) 核心步骤:
Java架构师必看
2021/07/23
1.3K0
JavaWeb day6 Servlet快速入门 学习和编写Servlet程序
介绍完Servlet是什么以后,接下来我们就按照快速入门->执行流程->生命周期->体系结构->urlPattern配置->XML配置的学习步骤,一步步完成对Servlet的知识学习,首选我们来通过一个入门案例来快速把Servlet用起来。
小小程序员
2023/02/24
5560
JavaWeb day6 Servlet快速入门 学习和编写Servlet程序
上传文件
**request.getParameter(String)**方法获取指定的表单字段字符内容,但文件上传表单已经不在是字符内容,而是字节内容,所以失效。
星哥玩云
2022/09/14
5.6K0
Servlet: 全网最全Servlet详解
从事web开发的人,会很清楚一个东西叫 Web服务器,比如J2EE开—Tomcat,Jetty,.NET开发—IIS等。HTTP服务器是使用 HTTP(超文本传输协议) 与客户机浏览器进行信息交流。
Freedom123
2024/03/29
4560
Servlet: 全网最全Servlet详解
Servlet 学习总结
IDEA 全称 IntelliJ IDEA,由JetBrains公司开发,是java编程语言开发的集成环境。在业界被公认为最 好的java开发工具,尤其在智能代码助手、代码自动提示、重构、J2EE支持、各类版本工具(git、svn 等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。
不吃紫菜
2022/08/18
1K0
Servlet 学习总结
Servlet API 源码剖析
从目录出发,整个源代码分为 servlet、http、descriptor、annotation 四个部分。
FoamValue
2020/08/31
6780
SpringMVC-07 拦截器+文件上传下载
SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。开发者可以自己定义一些拦截器来实现特定的功能。
张小驰出没
2021/04/15
5810
SpringMVC-07  拦截器+文件上传下载
开发中经常碰到的问题cookie和session问题,今天一并解决
会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。
好好学java
2018/09/21
3.1K0
开发中经常碰到的问题cookie和session问题,今天一并解决
相关推荐
Java Web Servlet (Part D)- File Upload &amp; Download
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验