SpringSpringBoot上传文件到七牛云

准备工作

maven

pom.xml添加七牛云的sdk依赖

        <dependency>

        &lt;groupId&gt;com.qiniu&lt;/groupId&gt;<br/>
        &lt;artifactId&gt;qiniu-java-sdk&lt;/artifactId&gt;<br/>
        &lt;version&gt;7.2.27&lt;/version&gt;<br/>
    &lt;/dependency&gt;<br/>

配置项

七牛云上传必要的配置有:accessKey、secretKey、bucket

其中accessKey、secretKey在该网址可查看

bucket为你的存储空间名,如下:

实现

application.yml配置

upload:
qiniu:

domain: 填你的域名<br/>
access-key: 你的accesskey<br/>
secret-key: 你的secretKey<br/>
bucket: 你的存储空间名,我这里为colablog<br/>

domain

上传配置类

@ConfigurationProperties@ComponentUploadProperties
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; /**

  • @author Johnson
  • @date 2019/12/16/ 09:35:36
    */
    @Component
    @ConfigurationProperties(prefix = “upload”)
    public class UploadProperties { private Local local = new Local(); public Local getLocal() {
    return local;
    } /**
    • @author: Johnson
    • @Date: 2019/12/16
    • 本地上传配置
      */
      public class Local {

      } private Qiniu qiniu = new Qiniu(); public Qiniu getQiniu() {
      return qiniu;
      } /**
    • @author: Johnson
    • @Date: 2019/12/16
    • 七牛云上传配置
      */
      public class Qiniu {
      /**
      • 域名
        */
        private String domain; /**
      • 从下面这个地址中获取accessKey和secretKey
      • https://portal.qiniu.com/user/key
        */
        private String accessKey; private String secretKey; /**
      • 存储空间名
        */
        private String bucket; public String getDomain() {
        return domain;
        } public void setDomain(String domain) {
        this.domain = domain;
        } public String getAccessKey() {
        return accessKey;
        } public void setAccessKey(String accessKey) {
        this.accessKey = accessKey;
        } public String getSecretKey() {
        return secretKey;
        } public void setSecretKey(String secretKey) {
        this.secretKey = secretKey;
        } public String getBucket() {
        return bucket;
        } public void setBucket(String bucket) {
        this.bucket = bucket;
        }
        }
        }

七牛云上传接口和类

上传接口如下:

public interface UploadFile {
String uploadFile(MultipartFile file);
}

上传类

import cn.colablog.blogserver.utils.properties.UploadProperties;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import org.springframework.web.multipart.MultipartFile; import java.io.IOException;
import java.util.UUID; /**
  • @author Johnson
  • @date 2019/12/14/ 17:20:16
  • 上传文件到七牛云
    */
    public class UploadFileQiniu implements UploadFile { private UploadProperties.Qiniu properties; //构造一个带指定Region对象的配置类
    private Configuration cfg = new Configuration(Region.region2()); private UploadManager uploadManager= new UploadManager(cfg); public UploadFileQiniu(UploadProperties.Qiniu properties) {
    this.properties = properties;
    } /**
    • @author: Johnson
      */
      @Override
      public String uploadFile(MultipartFile file) {
      Auth auth = Auth.create(properties.getAccessKey(), properties.getSecretKey());
      String token = auth.uploadToken(properties.getBucket());
      try {
      String originalFilename = file.getOriginalFilename();
      // 文件后缀
      String suffix = originalFilename.substring(originalFilename.lastIndexOf(“.”));
      String fileKey = UUID.randomUUID().toString() + suffix;
      Response response = uploadManager.put(file.getInputStream(), fileKey, token, null, null);
      return properties.getDomain() + fileKey;
      } catch (IOException e) {
      e.printStackTrace();
      }
      return “error”;
      }
      }
  • RegionRegion.region2()Region

    好了,准备工作已完成,现在就到调用了,调用类如下:

    @RestController
    @RequestMapping(“/upload”)
    public class UploadFileController {
    @Autowired
    UploadProperties uploadProperties; @PostMapping(“/img”)
    public String uploadFileYun(MultipartFile file) {
    // 上传到七牛云
    UploadFile uploadFile = new UploadFileQiniu(uploadProperties.getQiniu());
    return uploadFile.uploadFile(file);
    }
    }

    是不是很简单呢?屁啊!简单个毛线,其实这个我是已经简化了,实际上在我的项目的结构是比这个复杂的。

    总结
    Upload
    @Component

    三:配置文件我为什么会想到使用内部类来分割配置项呢?其实大家在编写一些类似功能的时候,都可以去参照一下别人的源码,当然,这里指的是大神的源码。因为我在写配置项的时候就想看看大神的配置项是怎么写的,就点进了rabbitmq的配置项。所以啊,看到了大神的代码是真的有长进的。

    如果你需要查看更详细的官方文档,请点击下方链接:

    最后:感谢大家的阅读,Thanks♪(・ω・)ノ

    个人博客网址: https://colablog.cn/

    如果我的文章帮助到您,可以关注我的微信公众号,第一时间分享文章给您