Springboot上传图片和回显示图片

news/2024/6/16 21:54:19 标签: spring boot, 后端, java

本次演示的是直接使用Springboot上传到服务器而不是七牛云等oss,springboot对于前端传输的文件数据类型格式的封装为MultipartFile,前端上传的图片是被存在服务端的缓存区的,当controller处理的时候,缓存区就被清空,所以需要转存,使用transferTo Api

前端采用elementui 直接上传图片
游览器查看内容
在这里插入图片描述
发送的内容image/jpeg等格式
后端:

先对源文件名的后缀做一个截取,保证格式不变,然后对文件名采用uuid加时间搓保证唯一性,在使用对响应体写数据的方式完成回显

java">   @Value("${photo.path}")
    String path;
    @PostMapping("upload")
    public R<String> upload(MultipartFile file){
        if (Objects.isNull(file)){
            return  R.error("上传错误");
        }

//        1.判断当前目录是否存在
        File dir = new File(path);
        if(!dir.exists()){
//            不纯在的话就根据路径来创建对应文件夹
            dir.mkdirs();
        }

        log.info("通用接口接受到图片:{}",file);
        /**
         * 上传完的文件 是暂时缓存到 tomcat服务器上的  ,转存到另一个位置
         */
        try {
//            获取后缀
            String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf('.'));
                String fileName=UUID.randomUUID().toString() + new Date().getTime() +suffix;
//            实际是保存到图片服务器
            file.transferTo(new File(path + fileName));
            return R.success(fileName);
        } catch (IOException e) {
            throw new CustomerException("创建失败");
        }


    }
@GetMapping("download")
    public void download(@RequestParam String name , HttpServletResponse response){
//        设置相应体输出的类型
        response.setContentType("image/jpeg");
//        对游览器的相应体进行下载
//        1.input输入流 读取文件
        try {
            FileInputStream fileInputStream = new FileInputStream(new File(path+name));

            OutputStream outputStream = response.getOutputStream();
            byte[] bytes = new byte[1024];
            int len=0;
//           2. 对文件进行读取  并且赋值给长度
            while ((len=fileInputStream.read(bytes))!=-1){
//              3.流写入相应体
    outputStream.write(bytes, 0, len);
    outputStream.flush();
            }

            fileInputStream.close();
            outputStream.close();
                 } catch (Exception e) {
            throw new CustomerException("Common::log::DOWNLOAD" +
                    "::图片获取失败:"+e.getMessage());
        }
//        2.output输出流进行展示图片
    }

http://www.niftyadmin.cn/n/478708.html

相关文章

uni-app 微信小程序 onReachBottom 不生效

问题描述&#xff1a; uni-app 微信小程序&#xff0c;页面滑到底部&#xff0c;onReachBottom 没有生效 解决&#xff1a; 最外层容器设置 min-height: 101vh 代码&#xff1a; pages.json 配置 {"path": "","style": { "navigationBar…

Element ui 取消点击空白处弹框关闭的效果

目录 属性&#xff1a; 描述 属性&#xff1a; element组件库的Dialog对话框默认是可以通过点击 modal 关闭 Dialog&#xff0c;即点击空白处弹框可关闭。 描述 在 el-dialog中close-on-click-modal含义是&#xff1a;点击空白处是否关闭&#xff0c;默认true&#xff1b;如…

为什么你总学不会编程?到底差什么?

为什么你总学不会编程&#xff1f;到底差什么&#xff1f; 笔者看到太多太多的人花上钱、耗费一两年的时间都学不会编程&#xff0c;甚至一门C语言都反反复复学不完、学不会&#xff0c;游走在大门边缘&#xff0c;总是入不了门&#xff0c;到底是什么因为什么&#xff1f; 因…

王爽《汇编语言》期末考试题库(附答案)

单选题 第一章 PC机的最小信息单位是&#xff08; &#xff09;。 A. bit B. 字节 C. 字长 D. 字 A PC机的最小信息单位是比特(bit)&#xff0c;常用来表示一位二进制数字&#xff08;0或1&#xff09;。字节(byte)是计算机中常用的数据单位&#xff0c;一个字…

数学建模—层次分析法

数模算法1&#xff1a;层次分析法 适用问题&#xff1a;评价类问题&#xff0c;决策&#xff08;方案选择类&#xff09; ** input**&#xff1a;判断矩阵&#xff08;A&#xff09; AHP处理 output:权重&#xff08;得分&#xff09;向量 1.整体导图 2.算法步骤及代码 2.1算…

求字符串中出现次数最多的字符及次数

分析&#xff1a; 建立一个对象&#xff0c;将字符串某一项作为key&#xff0c;value作为出现的次数需要注意一点&#xff0c;需要去掉字符串的空格。当然每个字符的出现的次数已知了&#xff0c;进而可知最多的次数了&#xff0c;将获得的对象进行Object.values&#xff0c;得…

真的好用吗?鲜有人提的 RabbitMQ-RPC模式

RabbitMQ系列文章 手把手教你&#xff0c;本地RabbitMQ服务搭建&#xff08;windows&#xff09; 消息队列选型——为什么选择RabbitMQ RabbitMQ灵活运用&#xff0c;怎么理解五种消息模型 RabbitMQ 能保证消息可靠性吗 推或拉&#xff1f; RabbitMQ 消费模式该如何选择 死信是…

3.5.1MapReduce原理详解

单机程序计算流程 输入数据—>读取数据—>处理数据—>写入数据—>输出数据 Hadoop计算流程 input data&#xff1a;输入数据 InputFormat&#xff1a;对数据进行切分&#xff0c;格式化处理 map&#xff1a;将前面切分的数据做map处理(将数据进行分类&#xf…