springboot+vue+elementui 上传图片和文字(表单)到阿里oss 前后端代码详解

springboot+vue+elementui 前后端分离 上传图片和文字说明或其他参数(表单)到阿里oss 前后端代码详解,全代码分享!

一、前端

   前端使用的是vue+elementui;

  1. data中定义 (根据页面规划来)
     upLoadVisible: false,
     uploadForm: {
              //主标题
              title: '',
              //banner类型: 1:首页banner  2 :首页上划推广
              type: '',
              //适用业务类型
              businessType: '',
              //副标题内容
              content: '',
              //显示条件- 条件id数组
              conditions: '',
              //排序
              sort: '',
              //客户端类型  1 乘客端   2 司机端
              clientType: '',
            },

     

  2. 弹出框
     上传banner
         
    
    
      
        
        
          
            
              
            
            
              
            
    
            
              
            
          
          
            
            
    将文件拖到此处,或点击上传
    只能上传图片文件,且只能上传一张

     

  3. js
    methods:{
    
     /**
           * 点击打开上传图片页面
           */
          uploadBanner () {
            this.upLoadVisible = true
          },
    
    
    
         //自定义上传文件
          //http-request	覆盖默认的上传行为,可以自定义上传的实现	function
          uploadFile(file){
            //console.log(111)
            // 根据后台需求数据格式
            const  form=new FormData();
            // 文件对象
            form.append("file", file.file);
            // 要在请求时添加特定属性(其他参数),所以要用自己方法覆盖默认的action
            form.append("hld", JSON.stringify(this.uploadForm));
            this.$postMultipart(this.uploadUrl,form).then((result)=>{
              if(result.data.code===0){
                this.$message.success("图片上传成功");
                this.upLoadVisible=false;
                this.getData(this.pageNum,this.pageSize)
              } else {
                this.$message.warning(result.data.msg);
              }
              //上传完成后,清空缓存
              this.$refs.upload.clearFiles();
              this.$refs.uploadForm.resetFields();
    
            }).catch((error)=>{
              console.log("上传失败 file:",file);
              //即使失败,也会清除上传的图片,因为只有上传图片的动作发生时,他才会调用上传接口
              this.$refs.upload.clearFiles();
              this.$message.warning(error.message);
            })
    
          },
    
    }

     

二、后端 

    @PostMapping("addPicture")
    public Result addPicture(String hld, MultipartFile file) throws Exception {
        logger.info("上传文件 hld:{} ", hld);
        if (file == null || hld == null) {
            return ResultUtil.fail(ExceptionCodeEnum.PARAMS_IS_NULL);
        }
        HomeLinkLocalDto homeLinkLocalDto = JSONObject.parseObject(hld, HomeLinkLocalDto.class);
        if (homeLinkLocalDto==null){
            return ResultUtil.fail(ExceptionCodeEnum.PARAMS_IS_NULL);
        }
        if (ObjectUtils.isFieldNull(homeLinkLocalDto)){
            logger.info("对象中有字段值为空 HomeLinkLocalDto:{}",homeLinkLocalDto);
            return ResultUtil.fail(ExceptionCodeEnum.PARAMS_IS_NULL);
        }
        //获取文件名称
        String fileName = file.getOriginalFilename();
        if (StringUtils.isNotBlank(fileName)) {
            //获取文件后缀
            String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
            String[] arr = {"BMP", "PCX", "PNG", "JPEG", "GIF", "TIFF", "DXF", "CGM", "CDR", "WMF", "EPS", "EMF", "PICT"};
            //如果前端传递过来的文件格式在 图片格式数组中
            boolean contains = Arrays.asList(arr).contains(suffix.toUpperCase());
            if (!contains) {
                logger.info("上传的文件非图片,文件后缀为:suffix:{}", suffix);
                return ResultUtil.fail(ExceptionCodeEnum.ONLY_JPG);
            }

            try {
                File newFile = new File(fileName.trim());

                //保存到本地(如果不保存到本地,直接上传Oss,后面会报路径异常)
                FileOutputStream os = new FileOutputStream(newFile);
                os.write(file.getBytes());
                os.close();
                //transferto()方法 把内存中图片写入磁盘
                file.transferTo(newFile);


                // 上传到OSS
                String ossUrl = aliyunOssUtil.upload(newFile, "banner");
                if (StringUtils.isBlank(ossUrl)) {
                    logger.info("阿里云上传失败");
                    return ResultUtil.fail(ExceptionCodeEnum.OSS_UPLOAD_FAIL);
                }
              
            } catch (Exception e) {
                logger.info("上传文件异常:{}", e);
            }

        }
        return ResultUtil.fail(ExceptionCodeEnum.PARAMS_IS_NULL);

    }

这只是我最近碰到的,有问题随时交流!

你可能感兴趣的:(工具类)