Spring mvc 上传单文件 多文件 下载文件

本文详细介绍了使用Java进行单文件和多文件上传的过程,包括HTML表单设计、MultipartFile类的使用、文件大小与类型检查、文件保存路径设定及异常处理。同时,还展示了如何实现文件下载功能。

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

单文件上传

fileUpload.jsp

<%@ page isELIgnored="false" contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form method="post" enctype="multipart/form-data" action="/driver/upload">

    请选择文件:<input type="file" name="attach">
    <input type="submit" value="提交">
    <p>${uploadFileError}</p>
    <img src="<%=request.getContextPath()%>/statics/upload/${fileName}">
</form>
</body>
</html>

 

 DriverController

@RequestMapping("/someupload")
    public String someUpload(MultipartFile attach, HttpServletRequest request){

        String path=request.getSession().getServletContext().getRealPath("statics"+ File.separator+"upload");//上传的位置

      

        if(attach!=null){

          
                    String oldFileName=attach.getOriginalFilename(); //原文件名
                    String prefix= FilenameUtils.getExtension(oldFileName);//原后缀名

                    int fileSize=500000;//允许上传的最大的文件大小
                    if(attach.getSize()>fileSize){ //上传文件大小不得超过500kb
                        request.setAttribute("uploadFileError","*上传文件大小不得超过"+fileSize+"KB");
                        return "someFileUpload";
                    }else if(prefix.equalsIgnoreCase("jpg")   //限制上传文件的类型
                            || prefix.equalsIgnoreCase("png")
                            || prefix.equalsIgnoreCase("jpeg")
                            || prefix.equalsIgnoreCase("pneg")
                    ){
                        String fileName=System.currentTimeMillis()+ RandomUtils.nextInt(1000000)+"_Personal.jpg";
                        File file=new File(path,fileName);
                        if(!file.exists()){
                            file.mkdirs(); //如果文件不存在则创建一个文件夹
                        }
                        try {
                            attach.transferTo(file);


                        } catch (IOException e) {
                            e.printStackTrace();
                            request.setAttribute("uploadFileError", "*上传失败");
                            return "someFileUpload";
                        }

                    }else{
                        request.setAttribute("uploadFileError","* 上传图片格式不正确!");
                        return "someFileUpload";
                    }


                }else{
                    request.setAttribute("uploadFileError","* 你没有上传任何文件!");
                    return "someFileUpload";
                }

            
            request.setAttribute("filename",fileName);
            return "someFileUpload";


        }else{
            request.setAttribute("uploadFileError","您没有上传任何文件!");
            return "someFileUpload";
        }

    }

 多文件上传

 someFileUpload.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form method="post" action="/driver/someupload" enctype="multipart/form-data">

    请选择第一个文件:<input type="file" name="attachs">
    请选择第二个文件:<input type="file" name="attachs">
    请选择第三个文件:<input type="file" name="attachs">
    <input type="submit" value="提交">
    <p>${uploadFileError}</p>

    <c:forEach var="att" items="${images}">
        <img src="<%=request.getContextPath()%>/statics/upload/${att.value}">
        <a href="/driver/downFile/${att.value}">下载此图片</a>
    </c:forEach>

</form>
</body>
</html>

 DriverController

 @RequestMapping("/someupload")
    public String someUpload(MultipartFile[] attachs, HttpServletRequest request){

        String path=request.getSession().getServletContext().getRealPath("statics"+ File.separator+"upload");//上传的位置

        Map<String,String> imgs=new HashMap<>();

        if(attachs!=null &&attachs.length>0){

            for (MultipartFile attach : attachs){

                if(!attach.isEmpty()){
                    String oldFileName=attach.getOriginalFilename(); //原文件名
                    String prefix= FilenameUtils.getExtension(oldFileName);//原后缀名

                    int fileSize=500000;//允许上传的最大的文件大小
                    if(attach.getSize()>fileSize){ //上传文件大小不得超过500kb
                        request.setAttribute("uploadFileError","*上传文件大小不得超过"+fileSize+"KB");
                        return "someFileUpload";
                    }else if(prefix.equalsIgnoreCase("jpg")   //限制上传文件的类型
                            || prefix.equalsIgnoreCase("png")
                            || prefix.equalsIgnoreCase("jpeg")
                            || prefix.equalsIgnoreCase("pneg")
                    ){
                        String fileName=System.currentTimeMillis()+ RandomUtils.nextInt(1000000)+"_Personal.jpg";
                        File file=new File(path,fileName);
                        if(!file.exists()){
                            file.mkdirs(); //如果文件不存在则创建一个文件夹
                        }
                        try {
                            attach.transferTo(file);

                        } catch (IOException e) {
                            e.printStackTrace();
                            request.setAttribute("uploadFileError", "*上传失败");
                            return "someFileUpload";
                        }
//                        request.setAttribute("fileName",fileName);
                        imgs.put(oldFileName,fileName);

                    }else{
                        request.setAttribute("uploadFileError","* 上传图片格式不正确!");
                        return "someFileUpload";
                    }


                }else{
                    request.setAttribute("uploadFileError","* 你没有上传任何文件!");
                    return "someFileUpload";
                }

            }

            request.setAttribute("images",imgs);
            return "someFileUpload";

        }else{
            request.setAttribute("uploadFileError","您没有上传任何文件!");
            return "someFileUpload";
        }

    }

 

文件下载

前端依旧为上面someFileUpload.jsp

DriverController

    @RequestMapping(value = "/downFile/{fileName}",produces = {})
    public void downFile(@PathVariable String fileName,HttpServletRequest request, HttpServletResponse response){

        if(fileName!=null){
            String realPath=request.getContextPath()+"statics"+ File.separator+"upload/";
            File file=new File(realPath,fileName);
            OutputStream os=null;

            if(file.exists()){
                response.setContentType("application/force-download"); //设置强制下载不打开
                    response.setHeader("Content-Disposition","attachment;filename="+fileName); //设置文件名
                try {
                    os=response.getOutputStream();
                    os.write(FileUtils.readFileToByteArray(file));
                    os.flush();
                } catch (IOException e) {
                    e.printStackTrace();
                }finally {
                    if(os!=null){
                        try {
                            os.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }else{
                request.setAttribute("uploadFileError","下载的文件不存在!");
            }
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值