request学习---文件上传

本文介绍了一个典型的文件上传案例,包括前端表单设计与后端处理流程。前端使用HTML表单实现文件选择与描述输入,而后端则通过Servlet解析上传的数据,实现了文件的存储。此外,还涉及了文件大小限制及唯一文件名生成等细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:利用网页表单提交文件,上传至服务器。

前端页面表单 enctype=”multipart/form-data”

<form action="upload" method="post" enctype="multipart/form-data">
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            上传文件:<input type="file" name="up1"/><br/><br/>

            文件描述:<input type="text" name="desc"/><br/><br/>

            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            上传文件:<input type="file" name="up1"/><br/><br/>

            文件描述:<input type="text" name="desc"/><br/><br/>

            <input type="submit" value="提交"/>

        </form>

后台服务器:通过request流的方式接受过来看看。
我上传的文件如下,文件名:a.txt

这里写图片描述

通过request收到后台,输出来
解析代码

InputStream in = request.getInputStream();
        BufferedReader br = new BufferedReader( new InputStreamReader(in));
        String line=null;
        while( (line=br.readLine())!=null){
            System.out.println(line);
        }

输出内容
这里写图片描述

只要把这个内容解析出来,在通过流生成文件,就完成了文件上传。

可是———–我不会。

只能调用别人的包了。这两个包(导入lib目录下)
这里写图片描述

剩下的代码就变成这样的啦。 我已经写好了的啦

public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //在POST2方式提交下只能设置文件名字的编码
        request.setCharacterEncoding("utf-8");
        //创建一个用来存储上传临时文件的类(不创建Tomcat会采用默认的) 
        // 参数:缓存文件大小,路径; 缓存文件达到5*1024B时就会刷缓存 
        FileItemFactory f = new DiskFileItemFactory(1024*5, new File("E/a"));
        //文件上传的解析器
        ServletFileUpload upload = new ServletFileUpload(f);
        //设置单个文件的最大文件大小:3M
        upload.setFileSizeMax(1024*1024*3);
        //设置所有文件的容量:30M
        upload.setSizeMax(1024*1024*3*10);
        try {
            List<FileItem> list = upload.parseRequest(request);
            //表单提交两种类型:POST1普通表单(信息)提交、POST2文件上传提交;
            for(FileItem fi:list){
                //fi.isFormField():true---POST1; false---POST2
                if(fi.isFormField()){
                    //拿到POST1方式提交的内容
                    String str = fi.getString("utf-8");
                    System.out.println("文件描述:"+str);
                }else{
                    //拿到上传的文件名
                    String name = fi.getName();
                    if(fi.getSize()==0){
                        continue;
                    }
                    String ext = name.substring(name.lastIndexOf('.'));
                    String fileName = UUID.randomUUID().toString().replaceAll("-", "")+ext;
                    System.out.println("文件名:"+fileName);
                    //拿到上传文件的流:文件内容导入流
                    InputStream in = fi.getInputStream();
                    //拿到文件存放的位置
                    String path = getServletContext().getRealPath("/uploads");
                    //再通过工具类帮忙把文件内容考到知道路径
                    FileUtils.copyInputStreamToFile(in, new File(path+"/"+fileName));
                }
            }
        } catch (FileUploadException e) {
            e.printStackTrace();
        }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值