blade最简集成七牛云实现上传功能

亡羊补牛
亡羊补牛 2019-05-14 01:03
阅读需:0

文件上传现在七牛云还是每月10GB免费流量,我们就最简单的实现七牛云上传文件。

1、首先注册七牛云,在个人信息,密钥管理中获取AccessKey 和SecretKey,


2、创建Buckets,产品主页、对象存储,新建存储空间


3、然后点击绑定域名,填写你的私有域名,如果不添加就要通过api获取文件,操作起来有点麻烦,绑定个域名,设置DNS解析Cname 指向七牛分配给你的域名就可以了,https是收费的,如果通信协议不选择https接入,而你的后台管理页面又开启了https,会提示网站中有不安全内容,可以忽略,也可以nginx代理,自己百度下处理吧,


4、言归正传,我们需要设置几个重要的参数,引入依赖,在applocation.yml中blade下添加七牛云相关配置参数,:


    com.qiniu
    qiniu-java-sdk
    [7.2.0, 7.2.99]


blade:
  secure:
    url:
      exclude-patterns:
        - /blade-test/**
    client:
      - client-id: sword
        path-patterns:
          - /blade-sword/**
      - client-id: saber
        path-patterns:
          - /blade-saber/**
  tenant:
    column: tenant_code
    tables:
      - blade_notice

  qiniu:
    domain: http://oss.blade.vip
    prefix: blade   #可以理解为存储桶上的文件夹
    accesskey: 4i_zJNVB93TRiGhUlI9qPBfFQz2sG
    secretkey: ii0lB8Dfwv9syhg4V9FjJBQmT8htL
    bucketname: blade   #存储桶名称


5、config文件,common包下的congtig添加 OssConfig类,代码如下:


package org.springblade.common.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

/**
 * 七牛OSS配置文件
 * @author S.L
 */
@Data
@Configuration
@ConfigurationProperties(prefix="blade.qiniu")
public class OssConfig {
   /**
    * 七牛外链域名
    */
   private String domain;

   /**
    * 路径前缀
    */
   private String prefix;

   /**
    * ACCESS_KEY
    */
   private String accessKey;

   /**
    * SECRET_KEY
    */
   private String secretKey;

   /**
    * 存储空间名
    */
   private String bucketName;

}

6、system包下添加controller,OssController


package org.springblade.modules.system.controller;

import com.qiniu.common.Zone;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springblade.common.config.OssConfig;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

/**
 * 文件上传
 * 
 * @author S.L
 */
@RestController
@RequestMapping("/blade-system/oss")
@Api(tags="文件上传")
public class OssController {

   private UploadManager uploadManager;
   private String token;
   @Autowired
   OssConfig ossConfig;

   @PostMapping("upload")
   @ApiOperation(value = "上传文件")
   public R upload(@RequestParam("file") MultipartFile file) throws Exception {
      uploadManager = new UploadManager(new Configuration(Zone.autoZone()));
      token = Auth.create(ossConfig.getAccessKey(),ossConfig.getSecretKey()).
         uploadToken(ossConfig.getBucketName());

      /**
       * 生成上传文件名
       */
      String path = ossConfig.getPrefix() + "/" + Func.randomUUID() + file.getOriginalFilename();
      System.out.println(path);
      Response res = uploadManager.put(file.getBytes(), path, token);
      String fileUrl = ossConfig.getDomain() + "/" + path;
      return R.data(fileUrl);
   }

}
7、为了上传方便,暂时放行文件上传api接口


package org.springblade.common.config;


import org.springblade.core.secure.registry.SecureRegistry;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * Blade配置
 *
 * @author Chill
 */
@Configuration
public class BladeConfiguration implements WebMvcConfigurer {

   @Bean
   public SecureRegistry secureRegistry() {
      SecureRegistry secureRegistry = new SecureRegistry();
      secureRegistry.excludePathPatterns("/blade-auth/**");
      secureRegistry.excludePathPatterns("/blade-system/oss/**");
      secureRegistry.excludePathPatterns("/blade-log/**");
      secureRegistry.excludePathPatterns("/blade-system/menu/auth-routes");
      secureRegistry.excludePathPatterns("/doc.html");
      secureRegistry.excludePathPatterns("/js/**");
      secureRegistry.excludePathPatterns("/webjars/**");
      secureRegistry.excludePathPatterns("/swagger-resources/**");
      return secureRegistry;
   }

   @Override
   public void addResourceHandlers(ResourceHandlerRegistry registry) {
      registry.addResourceHandler("/js/**").addResourceLocations("classpath:/js/");
      registry.addResourceHandler("doc.html")
         .addResourceLocations("classpath:/META-INF/resources/");
      registry.addResourceHandler("/webjars/**")
         .addResourceLocations("classpath:/META-INF/resources/webjars/");
   }

}

8、application启动类上添加注解:


@EnableConfigurationProperties(OssConfig.class)


到这里就可以上传了,有没有觉得太简单?截个上传成功的控制台日志吧



最后,saber前端也是比较省事的,userinfo里面有个avatar上传的demo,api接口一换就可以测试下了,

画叉那个位置 是我封装了后端的返回格式,按照前面的代码只要把原来的data.0,修改成data就可以了。


这个sns的富文本编辑简直。。。。。

评论
  • 噶噶
    2019-09-20 16:36
    老哥写的非常棒,赞
    4 回复
  • 龙
    2023-07-21 16:14
    文件名字被更改了怎么不让他更改
    2 回复