Servlet文件上传
来源:互联网 发布:js设置cookie作用域 编辑:程序博客网 时间:2024/06/05 15:05
网上还是有很多文件上传的案例,但是当我还不懂怎么上传的时候看起来还是非常吃力的.
今天老师讲解了怎么文件上传.我就把记下来,免得忘记
首先新建工程
我们先写前端index.html文件
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>FileUpload</title></head><body><form action="fileUpdate.do" method="post" enctype="multipart/form-data"> <input type="file" required name="file"><br /> <input type="submit" value="上传"></form></body></html>
下面来创建Servlet
添加@WebServlet("/fileUpdate.do")
注解用于将action提交到此Servlet
添加 @MultipartConfig
注解用于解析上传文件(没有这个注解就不能上传)
然后执行服务器,看看后台执行了什么东西
进入主页看到这样的界面
选择一个文件 点击上传按钮
在控制台出现这个东西
点击Name为fileUpload.do的东西
右边就会显示详细信息
定位到最下面看到红线圈出来的地方
这个就是上传的文件信息,所以在编写后端代码的时候就只需要解析这个信息就可以了.
回到Servlet 首先确定上传的文件存放目录(这段代码要写在doPost里面,因为文件上传只能用post,
get能够传送的东西很少,所以才用的post.我是这样认为的)
//存放文件目录String path = "D:/Projects Files/images";File file = new File(path);if (!file.exists()) file.mkdirs();
再执行文件上传操作,就是得到Part对象
// 执行文件上传操作Part part = request.getPart("file");
然后获取上传文件的文件名
//获取文件名称String disposition = part.getHeader("Content-Disposition");String filename = disposition.split("[;]")[2];filename = filename.substring(filename.indexOf("\"") + 1, filename.length() - 1);
由于不能直接获取文件名,所以就要自己解析文件名了.这个步骤就要用到上面那个用红色圈起来的东西了.我们首先得到http信息头下面的Content-Disposition信息.就是下面用红色圈起来的文字了.这是稳定规定的名字,所以直接调用就好
String disposition = part.getHeader("Content-Disposition");
disposition 字符串得到的就是form-data; name="file"; filename="Snipaste_2017-09-11_15-56-46.png"
这个内容
所以就先将他用分号分隔开得到三个字符串文件名在第三个字符串里面,所以下标为2(数组技术从0开始)值为filename="Snipaste_2017-09-11_15-56-46.png"
(filename前面是还有一个空格,但是在这里并不重要,只是提一下)
然后提取文件名字符串就是定位第一个引号后一位到结尾前一个位就好.最后的到的filename才是完整的文件名.
最后当然是将上传的文件写到磁盘
part.write(path + File.separator + filename);
完整代码
package com.wanli;import java.io.File;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.MultipartConfig;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.Part;@WebServlet("/fileUpdate.do")@MultipartConfigpublic class FileUploadDemo extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 存放文件目录 String path = "D:/Projects Files/images"; File file = new File(path); if (!file.exists()) file.mkdirs(); // 执行文件上传操作 Part part = request.getPart("file"); // 获取文件名称 String disposition = part.getHeader("Content-Disposition"); String filename = disposition.split("\\;")[2]; filename = filename.substring(filename.indexOf("\"") + 1, filename.length() - 1); part.write(path + File.separator + filename); }}
最后重启下服务器再次尝试上传文件,然后查看D:/Projects Files/images
是否上传成功
当然这是最简单的上传文件操作了,如果要限制文件上传个数,大小就要到@MultipartConfig
注解里面设置了@MultipartConfig(maxFileSize = 1024 * 1024 * 3)
限制文件上传大小为3M
设置上传文件个数为两个@MultipartConfig(maxRequestSize = 2)
,等等操作.
上面上传文件的代码其实还是很少的了.如果读者发现文章中有纰漏的地方希望能够指出来,谢谢!!
- Flex + servlet 上传文件
- JSP+servlet上传文件
- servlet文件上传
- Servlet文件上传
- Servlet上传文件
- 文件上传servlet应用
- jsp servlet文件上传
- 文件上传Servlet实例
- Servlet文件上传代码
- java servlet 文件上传
- servlet中的文件上传
- 文件上传Servlet例子
- Servlet实现文件上传
- Servlet 上传文件(转)
- Servlet实现文件上传
- servlet之上传文件
- servlet 文件上传
- servlet 上传excel文件
- POJ 1236 Network of Schools(强联通缩点)
- jquery 循环获得数字并用逗号进行拼接,同事后台进行循环取出
- 如何正确使用光纤跳线?
- Android animation帧动画
- SFP光模块
- Servlet文件上传
- 4ipnet——完善的网络解决方案
- 打开光网时代的大门
- 易天光通信引进新测试设备啦!
- 光模块基本概念
- 带大家全面认识光纤交换机
- Linux配置Rancher-CLI
- 来简单谈谈100G以上光模块市场,超出你想象
- 很多人不会,这才是光纤交换机的使用方法!