文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

JavaWeb怎么实现简单上传文件功能

2023-07-02 12:06

关注

这篇文章主要介绍了JavaWeb怎么实现简单上传文件功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaWeb怎么实现简单上传文件功能文章都会有所收获,下面我们一起来看看吧。

基本思想:网站服务器的内部除了有Web应用,还有文件系统,客户端向网站上传文件就是将文件以流的形式传输给了服务器,如图所示:

JavaWeb怎么实现简单上传文件功能

注意事项:

为保证服务器的安全,上传的文件路径应放在外界不能直接访问的目录下,比如WEB-INF目录下。
2、因为服务器的文件系统大小有限,上传的文件大小必须要有限制。
3、为防止因为文件名重复而导致文件覆盖,应当给上传的文件夹生成唯一的标识,比如时间戳、UUID或者md5加密。
4、可以限制上传文件的类型,在收到文件的时候,判断文件后缀是否合法。

在JavaWeb中,一般我们使用ServletFileUpload类来处理上传的文件数据,它使用parseRequest方法将表单的每一个输入项封装成一个FileItem对象,并以list的形式返回,处理数据比较简短,方便。

下面是一个上传文件的小demo,编辑器是IDEA,项目类型是Maven Webapp。

package com.xiaojing.servlet;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.*;import java.util.List;import java.util.UUID;public class FileUploadServlet extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        //判断表单是普通表单,还是上传文件表单        if(!ServletFileUpload.isMultipartContent(req)){            return;        }        //创建上传文件的路径,一般放在/WEB-INF下,比较安全        String uploadPath = this.getServletContext().getRealPath("/WEB-INF/upload");        File uploadFile = new File(uploadPath);        if(!uploadFile.exists()){            uploadFile.mkdir();        }        //如果上传的文件大小超过了限制,那么会将这个文件放在临时文件夹,过段时间提醒用户删除或者转为永久        String tempPath = this.getServletContext().getRealPath("/WEB-INF/temp");        File tempFile = new File(tempPath);        if(!tempFile.exists()){            tempFile.mkdir();        }        //1、创建DiskFileItemFactory对象        DiskFileItemFactory factory = new DiskFileItemFactory();        //2、获取ServletFileUpload对象        ServletFileUpload upload = new ServletFileUpload();        upload.setFileItemFactory(factory);        //3、处理上传文件            //将前端请求封装成Fileitem对象,每一个表单输入项都是一个Fileitem对象        try {            List<FileItem> items = upload.parseRequest(req);            for (FileItem item: items) {                if(item.isFormField()){ //如果是普通的表单                    //getFieldName()是input的name属性,getString()是input的value属性                    String fieldName = item.getFieldName();                    String value = item.getString("UTF-8");                    System.out.println(fieldName + ":" +value);                }else{  //上传文件的表单                    //---------------处理文件------------------//                    String uploadFileName = item.getName();                    System.out.println("上传的文件名:"+uploadFileName);                    if(uploadFileName == null || uploadFileName.trim().equals("")){                        continue;                    }                    //获取fileName文件名,uploadFileName一般是url/文件路径/文件                    String fileName = uploadFileName.substring(uploadFileName.lastIndexOf("\\")+1);                    //获取文件后缀                    String fileExt = uploadFileName.substring(uploadFileName.lastIndexOf(".")+1);                    System.out.println("文件信息:"+fileName);                    //---------------处理地址-----------------//                    //使用UUID唯一标识存放文件夹                    String uuidPath = UUID.randomUUID().toString();                    //获取真实的文件夹地址                    String realPath = uploadPath + "/" + uuidPath;                    File realFile = new File(realPath);                    if(!realFile.exists()){                        realFile.mkdir();                    }                    //---------------处理文件流-----------------//                    //获取文件上传的流                    InputStream inputStream = item.getInputStream();                    //创建一个文件输出流                    FileOutputStream outputStream = new FileOutputStream(realFile + "/" + fileName);                    //创建一个缓冲区                    byte[] buffer = new byte[1024 * 1024];                    int len = 0;                    while((len = inputStream.read(buffer)) > 0){ //每次读写1M                        outputStream.write(buffer,0,len);                    }                    outputStream.close();                    inputStream.close();                    String msg = "文件上传成功";                    System.out.println("文件上传成功");                    //清除临时文件                    item.delete();                    //转发                    req.setAttribute("msg",msg);                    req.getRequestDispatcher("index.jsp").forward(req,resp);                }            }        } catch (FileUploadException e) {            e.printStackTrace();        }    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        doGet(req, resp);    }}

关于“JavaWeb怎么实现简单上传文件功能”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“JavaWeb怎么实现简单上传文件功能”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯