96SEO 2026-02-19 08:36 11
。

在日常生活中#xff0c;我们在很多情况下都需要使用文件上传功能#xff0c;比如#xff1a;发微博、发朋友圈等…文件上传总览
文件上传主要是指将本地文件包括但不限于图片、视频、音频等上传到服务器提供其他用户浏览或下载的过程。
在日常生活中我们在很多情况下都需要使用文件上传功能比如发微博、发朋友圈等这里主要是指照片和视频文件可见文件上传的重要性。
文件上传功能实现需要涉及到两个部分一个部分是前端程序、一个部分是后端程序本文将前后端分开讲解。
前端若想进行文件上传网页的文件上传就必须要有文件上传的三要素前端必须要有这三要素才可以完成文件上传。
前端要想实现文件上传就必须定义一个form表单其中必须要有一个表单项类型为file表单的提交方式必须是post方式其原因是get方式提交有大小限制并且不是很大但文件上传可能涉及到大文件所以说应该使用post方式提交表单其最后一个要素也是最重要的要素就是在form表单中需要通过enctype属性设置表单的编码格式为
multipart/form-data这个设置非常重要——文件的本质上是二进制数据而form表单的默认编码格式x-www-form-urlencoded是不适合传递二进制数据的。
假如说使用form表单默认的编码格式传输文件的问题简单概括就是使用x-www-form-urlencoded编码格式传输文件不会传输文件中的内容数据只能传输一个文件名。
假如说我有一个.txt文本文件使用默认的编码格式进行上传
该表单的编码格式是默认的x-www-form-urlencoded
发现上传的文件数据只有上传的文件的文件名这证明了若使用form表单的默认编码格式那么传输文件是失败的只会上传文件的文件名。
需要一个form表单表单中需要一个表单项类型为file并且该表单的提交方式必须为post而且表单的编码格式必须修改为multipart/form-data。
文件上传的后端程序首先肯定是需要一个控制方法SpringBoot用于接收文件上传这个“功能接口”的请求并且请求的其他数据之前怎么接收现在仍然怎么接收比如简单参数、实体参数、日期参数等还是像之前那么接收即可请求提交的文件需要用SpringBoot提供的对象MultipartFile接收前端中file表单项的名称必须和控制方法参数列表中MultipartyFile对象名完全相同
/html通过调试启动服务发现此时可以成功接收到上传的文件并获取文件的路径
这是因为该表单有三个表单项分别是两个text表单项username和age和一个file表单项image文件两个大小小的就是传的username和age的值30kb那个temp文件就是上传的文件了通过记事本打开验证一下
现在已经在服务端接收到了文件但是一但程序运行停止这些临时文件也会消失——只要这次请求响应结束结束后不管成功与否临时文件都会被删除所以说后端程序不但要接收上传的文件更重要的是还需要将接收到的文件保存起来。
总结一下文件上传的准备工作
前端页面需要三要素1.需要在form表单中定义一个表单项的type为file2.需要指定表单的提交方式为post3.需要指定表单的编码格式enctype为multipart/form-data。
这三要素缺一不可后端需要使用Spring框架提供的MultipartFile类来接收前端上传的文件。
上述代码成功在服务端接收到了客户端上传的文件但是发现只能生成一个临时文件一但这次请求响应结束后.temp临时文件就会自动删除这显然是不符合开发逻辑的所以说我们需要将这些.temp临时文件存储起来。
此处先介绍本地存储。
本地存储就是在服务端接收到客户端上传的文件之后将文件存储在本地服务器磁盘中。
因为是基于SpringBoot框架这其实并不困难因为Spring框架中的MultipartFile对象提供了这样的方法——transferTotransferTo的参数中需要传递一个File文件对象就是将.temp临时文件写入到这个传递的文件对象中完成文件的本地存储。
此处在获取File对象的时候出现一个问题不能把文件名写死了——因为假如有多个文件时若把文件名写死了那么后接收到的文件就会把前一次接收到的文件的内容覆盖了整个功能接口就只能保存一个文件了。
此时的解决方法是将File对象的文件名存储为上传文件的原文件名MultpartFile对象中封装了上传文件的所有信息并且提供了对应的方法获取这些信息所以说直接可以通过操作MultipartFile对象得到原文件名
image.getOriginalFilename();image.transferTo(new
}此时代码就可以正确的接收到客户端上传的文件并将其保存在File指定的路径了
但此时还有一个问题假如说A用户上传了一个1.txt文件接着B用户又上传了一个txt文件也叫1.txt那么就会出现B用户的文件内容将A用户的文件内容覆盖的问题因为本地存储是按照文件的原名称存储的遇到重名文件就会出现这样的问题。
可能有人会想到使用System.currentTimeMillis()这个方法获取当前时间的毫秒值作为文件名避免重复但是在一些大的项目中有可能同一毫秒就正好有两个人上传了同一个同名的文件这还是不能从根本上解决文件名重复的问题解决这个问题可以使用UUID通用唯一识别码作为文件名进行存储UUID是不会重复的小概率事件不发生。
但是又存在一个问题假如说将UUID作为文件名那么文件的扩展名是什么
其实也非常简单因为我们已经得到了文件的原名称通过寻找到原文件名字符串中最后一个“.”所处的位置因为无论文件名是什么最后一个.之后的才是扩展名找到最后一个“.”所处的位置之后直接通过subString()方法截取到最后就可以获取文件的扩展名了然后再将其和UUID进行拼接就可以生成一个以UUID命名存储的文件了。
originalFilename.lastIndexOf(.);//
通过subString方法和最后一个“.”索引进行截取获取文件扩展名String
originalFilename.substring(index);//
externalName;image.transferTo(new
在SpringBoot框架中文件上传默认单个文件允许最大大小为1M。
如果需要上传大文件可以根据需求在application.properties我使用的是yaml配置文件进行配置思想是一样的只是配置的格式不同配置文件中进行设置
配置单个文件最大上传大小默认1MBmax-file-size:
配置单个请求最大上传大小一次请求可以上传多个文件max-request-size:
2.若项目中上传了大量文件这些文件都存储到服务器的本地磁盘服务器的磁盘空间是十分宝贵的用来存储用户上传的文件是十分浪费的并且若服务器的磁盘存储空间满了想要扩容也是十分困难的并且现在很多项目都是服务器集群扩容就更加困难了。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback