springboot实现文件上传和下载

本文深入探讨了文件上传和下载的技术实现,包括利用MultipartFile进行文件上传的处理流程,以及通过HttpServletRequest获取文件并实现文件下载的方法。文章详细介绍了如何处理文件名、设置文件路径、检查路径存在性、使用随机数避免文件名冲突,以及如何设置HTTP响应头以实现文件的正确下载。

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

文件上传

Action

 /**
     * 文件上传util
     *
     * @param request
     * @param file
     * @return
     * @throws IOException
     */
    @RequestMapping("/upload")
    @ResponseBody
    public String upload(HttpServletRequest request, MultipartFile file,Model model) throws IOException {
        if (file.getOriginalFilename() != null && !"".equals(file.getOriginalFilename())) {
            String filenames = null;
            String contextPath = request.getSession().getServletContext().getContextPath();
            String upaloadUrl = request.getSession().getServletContext().getRealPath("/") + "ajaxupload";
            //上传文件名
            String filename = file.getOriginalFilename();
            Random r = new Random();
            StringBuffer buf = new StringBuffer();
            for (int x = 0; x < 3; x++) {           //循环取得三个不大于10的随机整数
                buf.append(r.nextInt(10));
            }
            filename = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + buf.toString() + filename.substring(filename.lastIndexOf("."));
            File filepath = new File(upaloadUrl, filename);
            //判断路径是否存在
            if (!filepath.getParentFile().exists()) {
                filepath.getParentFile().mkdirs();
            }
            String fileNames = null;
            //将上传文件保存到一个目标文件中
            request.getSession().setAttribute("img", "1");
            file.transferTo(new File(upaloadUrl + File.separator + filename));
            fileNames = contextPath + "/ajaxupload/" + filename;

            hello.setHelloname(fileNames);
            hello.setHellopath(file.getOriginalFilename());
            int n=helloService.addHello(hello);
            model.addAttribute(file.getOriginalFilename(),"filename");
           /* ModelAndView mv=new ModelAndView();
            mv.setViewName("excal.html");*/
            return fileNames;
        } else {
            return null;
        }
    }

文件下载

Action

public String download(HttpServletRequest request) throws IOException {
        try {
            ServletContext servletContext=request.getSession().getServletContext();
            String realPath=servletContext.getRealPath("/ajaxupload");
            System.out.println(realPath);
           /* HttpServletResponse response = ServletActionContext.getResponse();*/
            String filename =request.getParameter("filename");
            // path是指欲下载的文件的路径。
            File file = new File(realPath+"\\"+filename);
            // 以流的形式下载文件。
            InputStream fis = new BufferedInputStream(new FileInputStream(realPath+"\\"+filename ));
            byte[] buffer = new byte[fis.available()];
            fis.read(buffer);
            fis.close();
            // 清空response
            response.reset();
            // 设置response的Header
            String filenameString = new String(filename.getBytes("utf-8"),
                    "iso-8859-1");
            response.addHeader("Content-Disposition", "attachment;filename="
                    + filenameString);
            response.addHeader("Content-Length", "" + file.length());
            OutputStream toClient = new BufferedOutputStream(response
                    .getOutputStream());
            response.setContentType("application/octet-stream");
            toClient.write(buffer);
            toClient.flush();
            toClient.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EviaHp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值