当前位置: 首页 > news >正文

Servlet上传文件

上篇文章:

Cookie和Sessionhttps://blog.csdn.net/sniper_fandc/article/details/147353722?fromshare=blogdetail&sharetype=blogdetail&sharerId=147353722&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link目录

1 常见方法

2 上传文件示例


1 常见方法

        HttpServletRequest类方法:

方法

含义

Part getPart(String name)

获取请求中给定name的文件

Collection<Part> getParts()

获取所有的文件

        Part类(表示一个文件对象)方法:

方法

含义

String getSubmittedFileName()

获取提交的文件名

String getContentType()

获取提交的文件类型

long getSize()

获取文件的大小

void write(String path)

把提交的文件数据写入磁盘文件

2 上传文件示例

        在前端代码中,主要使用tpye=”file”的input标签来上传文件,同时必须在form表单中添加属性enctype="multipart/form-data",这和后端的@MultipartConfig对应:

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><form action="upload" enctype="multipart/form-data" method="POST"><input type="file" name="MyFile"><input type="submit" value="提交图片"></form></body></html>

        后端代码:

//@MultipartConfig必不可少,标识当前接口是可以处理上传文件的@MultipartConfig@WebServlet("/upload")public class UploadFileServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 此处的MyFile和前端<input type="file" name="MyFile">中的name对应Part file = req.getPart("MyFile");// 获取文件的真实名字System.out.println(file.getSubmittedFileName());// 文件的大小System.out.println(file.getSize());// 文件类型System.out.println(file.getContentType());// 文件写入服务器磁盘file.write("D:\\javaee_study\\servlet\\firstServlet\\src\\main\\webapp\\upload\\result.jpg");resp.getWriter().write("upload OK!");}}

        前端上传结果:

        后端打印结果:

        同时,抓包发现,在上传文件的POST请求中,Header头包含字段:

        这里boundary是边界的意思,表示使用后面这串字符来作为body中文件的分隔符。

        注意:在服务器中上传的文件保存磁盘的时候,通常会出现重名的情况,因此往往把上传的文件名转化成唯一的字符串,在数据库保存唯一字符串和对应文件的路径,然后再把文件重命名为唯一的字符串写入指定上传路径中。

http://www.xdnf.cn/news/67159.html

相关文章:

  • 2025年渗透测试面试题总结-拷打题库10(题目+回答)
  • 软考 中级软件设计师 考点知识点笔记总结 day14 关系代数 数据库完整性约束
  • 计算机是如何工作的(上)
  • 23. git reset
  • 【形式化验证基础】活跃属性Liveness Property和安全性质(Safety Property)介绍
  • 计算机组成与体系结构:内存接口(Memory Interface)
  • 工具:下载vscode .vsix扩展文件及安装的方法
  • 可穿戴设备待机功耗需降至μA级但需保持实时响应(2万字长文深度解析)
  • 小天互连与DeepSeek构建企业智能化新生态
  • iframe下系统访问跨域问题解决办法
  • VTK知识学习(53)- 交互与Widget(四)
  • Unity3D ILRuntime与Scripting Backend整合指南
  • 剪映学习02
  • Kotlin协程学习笔记
  • OpenCV---图像预处理(四)
  • HCIE Datacom备考技巧
  • typedef MVS_API CLISTDEF0IDX(ViewScore, IIndex) ViewScoreArr;
  • 《解锁增强型上下文学习,打造你的专属智能助手》
  • 每天学一个 Linux 命令(29):tail
  • gnome中删除application中失效的图标
  • 齐次坐标系下的变换矩阵
  • 【图论 DFS BFS】P10725 [GESP202406 八级] 最远点对|普及+
  • LangChain实现PDF中图表文本多模态数据向量化及RAG应用实战指南
  • LeetCode算法题(Go语言实现)_54
  • ubuntu--汉字、中文输入
  • iso文件在麒麟V10系统上安装达梦数据库
  • 基础服务系列-Jupyter Notebook 支持JavaScript
  • 【技术派后端篇】基于 Redis 实现网站 PV/UV 数据统计
  • 前端笔记-Vue3(上)
  • Spark-SQL 四(实验)