瑞吉外卖:异常处理与文件操作

本文介绍了如何在Java程序中全局捕获SQLIntegrityConstraintViolationException异常,使用Spring的MultipartFile处理文件上传,以及通过ServletOutputStream实现文件下载到浏览器的示例。
摘要由CSDN通过智能技术生成

全局异常处理器

在程序中使用异常处理器进行全局异常捕获,此处主要处理SQLIntegrityConstraintViolationException异常,在reggie->common里面新建一个全局的异常捕获类 GlobalExceptionHandler.java,加注解@ControllerAdvice,拦截两种类
在这里插入图片描述创建方法exceptionHandler,加注解@ExceptionHandler(SQLIntegrityConstraintViolationException.class)表示此方法用于处理该种异常。
在这里插入图片描述

文件上传

上传的 form 表单如下
在这里插入图片描述服务端接收时通常会使用Apache提供的 commons-fileupload 和 commons-io 两个组件,Spring基于这两个组件做了封装,只需在Controller的方法中声明一个MultipartFile的参数即可使用。

在这里插入图片描述
方法实现如下
在这里插入图片描述

文件下载

通过浏览器进行文件下载有两种形式:下载到磁盘或通过浏览器打开。

文件上传成功之后回调handleAvatarSuccess方法,获取图片在服务器上的位置。
在这里插入图片描述然后再通过img标签展示,请求拼接好的 imageUrl,访问服务器的download。

在这里插入图片描述
文件下载的后端代码如下

    /**
     * 文件下载,图片回显浏览器
     */
    @GetMapping("/download")
    public void download(String name, HttpServletResponse response){
        try {
            //输入流,通过输入流读取文件内容
            FileInputStream fileInputStream = new FileInputStream(new File(basePath+name));
            //输出流,通过输出流将文件写回浏览器,在浏览器展示图片
            ServletOutputStream outputStream = response.getOutputStream();

            response.setContentType("image/jpeg");//设置响应的文件类型
            int len = 0;
            byte[] bytes = new byte[1024];
            while ((len = fileInputStream.read(bytes)) != -1){//用while循环一直写,写到-1证明写完了
                outputStream.write(bytes,0,len);
                outputStream.flush();
            }
            //关闭资源
            outputStream.close();
            fileInputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值