1.建普通maven项目,或者maven项目,这里以普通maven为例,区别的jar包的导入方式啦
到中央仓库下载哦
2.结构
3.写fileservlet
-
- public class FileServlet extends HttpServlet {
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
-
- //判断上传的文件是普通的表单还是带文件的表单(以表单方式提交)
- if(!ServletFileUpload.isMultipartContent(req)){
- return;//普通表单,终止方法运行
- }
-
- //创建文件上传后的保存路径
- String uploadPath=this.getServletContext().getRealPath("/WEB-INF/upload");
- File uploadFile=new File(uploadPath);
- if(!uploadFile.exists()){
- uploadFile.mkdir();//不存在,就创建这个目录
- }
-
- //缓存,临时文件放置
- String tmpPath=this.getServletContext().getRealPath("/WEB-INF/tmp");
- File file=new File(tmpPath);
- if(!file.exists()){
- file.mkdir();//不存在,就创建这个目录(临时)
- }
-
- //处理上传的文件,一般通过流获取
-
- try{
- //创建DiskFileItemFactory对象,处理文件上传限制 大小 路径
- DiskFileItemFactory factory=getDiskFileItemFactory(file);
- //获取ServletFileUpload
- ServletFileUpload upload=getServletFileUpload(factory);
- //处理上传的文件
- String msg=uploadParseRequest(upload,req,uploadPath);
- //servlet请求转发
- req.setAttribute("msg",msg);
- req.getRequestDispatcher("info.jsp").forward(req,resp);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- private static String uploadParseRequest(ServletFileUpload upload, HttpServletRequest req, String uploadPath) throws FileUploadException, IOException {
- String msg="";
- List<FileItem>fileItems=upload.parseRequest(req);
- for(FileItem fileItem:fileItems){
- if(fileItem.isFormField()){
- String name=fileItem.getFieldName();
- String value=fileItem.getString("UTF-8");
- System.out.println(name+":"+value);
- }else {
- String uploadFileName=fileItem.getName();
- System.out.println("文件:"+uploadFileName);
- if(uploadFileName.trim().equals("")||uploadFileName==null){
- continue;
- }
- //获取文件名(/),和后缀名(.) /img.png
- String fileName=uploadFileName.substring(uploadFileName.lastIndexOf("/")+1);
- String fileExtName=uploadFileName.substring(uploadFileName.lastIndexOf(".")+1);
-
- System.out.println("文件消息:"+fileName+"类型"+fileExtName);
- //UUID 保证文件名唯一
- //UUID.randomUUID()随机生成一个通用码
- String uuidPath= UUID.randomUUID().toString();
-
- String realPath=uploadPath+"/"+uuidPath;
- File realPathFile=new File(realPath);
- if(!realPathFile.exists()){
- realPathFile.mkdir();
- }
- //获取上传文件的流
- InputStream inputStream=fileItem.getInputStream();
- FileOutputStream fos=new FileOutputStream(realPath+"/"+fileName);
-
- //缓冲区
- byte[]buffer=new byte[1024*1024];
- //判断读取完成?
- int len=0;
- while ((len=inputStream.read(buffer))>0){
- fos.write(buffer,0,len);
- }
- fos.close();
- inputStream.close();
- msg="success";
- fileItem.delete();
- }
- }
- return msg;
- }
-
- private static ServletFileUpload getServletFileUpload(DiskFileItemFactory factory) {
- ServletFileUpload upload=new ServletFileUpload(factory);
- //监听文件上传速度
- upload.setProgressListener(new ProgressListener() {
- @Override
- public void update(long l, long l1, int i) {
- System.out.println("总大小:"+l1+"已上传"+l);
- }
- });
- upload.setHeaderEncoding("UTF-8");
- upload.setFileSizeMax(1024*1024*10);
- //1024=1kb*1024=10M
- return upload;
- }
-
- private static DiskFileItemFactory getDiskFileItemFactory(File file) {
- DiskFileItemFactory factory=new DiskFileItemFactory();
- //设置缓冲区,文件大于缓冲区放到临时文件
- factory.setSizeThreshold(1024*1024);
- factory.setRepository(file);
- return factory;
- }
-
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
-
- }
- }
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title>Title</title>
- </head>
- <body>
- <form action="${pageContext.request.contextPath}/upload.do" enctype="multipart/form-data" method="post">
- 上传用户:<input type="text" name="username"><br>
- <p><input type="file" name="file1"></p>
- <p><input type="file" name="file1"></p>
-
- <p><input type="submit">||<input type="reset"></p>
- </form>
- </body>
- </html>
5.info
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title>Title</title>
- </head>
- <body>
- <%--上传文件大小有限制:get--%>
- ${msg}
- </body>
- </html>