美文网首页
springboot上传文件到七牛云

springboot上传文件到七牛云

作者: ratil_ | 来源:发表于2019-08-02 17:00 被阅读0次

    本来一开始是写把图片上传到七牛云的,然后发现上传后访问图片,需要使用自己的备案的域名(之前的域名过期了),于是转向阿里云OSS。
    把七牛云的代码全删了后,写阿里云的,阿里云的写好后,发现阿里云买了储存空间还要买下行流量,而且对于我这样的穷逼来说,有点小贵,于是只好又重新转换七牛云,买了个域名并且重写代码。

    配置文件

    和阿里云一样首先也是配置文件,比较简单

    qiniu:
        access-key: your access key
        secret-key:  your secret key
        bucket: your bucket name
    

    配置类

    然后是配置类(为了方便写了个配置类用来注入)

    /**
     * 七牛云配置类
     * @create 2019-07-31 16:47
     */
    @Configuration
    public class QiniuConfig {
    
        @Value("${qiniu.access-key}")
        private String accessKey;
    
        @Value("${qiniu.secret-key}")
        private String secretKey;
    
        /** 获取七牛云的Configuration */
        @Bean
        public com.qiniu.storage.Configuration getQiniuConfig() {
            return new com.qiniu.storage.Configuration(Zone.zone2());
        }
    
        /** 获取Auth */
        @Bean
        public Auth getAuth() {
            return Auth.create(accessKey, secretKey);
        }
    }
    

    主体代码

    public class FileUploadServiceImpl implements FileUploadService {
    
        @Value("${qiniu.access-key}")
        private String accessKey;
    
        @Value("${qiniu.secret-key}")
        private String secretKey;
    
        @Value("${qiniu.bucket}")
        private String bucket;
    
        @Autowired
        private Auth auth;
    
        @Autowired
        private Configuration configuration;
    
        public Map<String, Object> uploadImage(InputStream inputStream, String suffix) {
            UploadManager uploadManager = new UploadManager(configuration);
            // 获取一个随机的文件名
            String filename = UUID.randomUUID().toString().replaceAll("-", "") + suffix;
            // 获取七牛云提供的 token
            String upToken = auth.uploadToken(bucket);
    
            // 七牛云用来获取返回信息的相应
            Response response;
            // 用来获取上传后的图片地址
            String picAddr;
            try {
                response = uploadManager.put(inputStream, filename, upToken, null, null);
                // 返回的 response其实是一个 json,转换为 Map,然后其中的 key就是上传的文件名了,其实就是上面生产的 filename
                // 由于域名还未备案完成,所以还不能真正得到图片直链访问地址,这里只是得到图片的文件名
                picAddr = new Gson().fromJson(response.bodyString(), Map.class).get("key").toString();
            } catch (QiniuException e) {
                response = e.response;
                log.error("【上传服务】上传图片发生出错误!{}", response.toString());
                e.printStackTrace();
            }
    
            // 这里是前端使用的 editor.md,要求上传图片后的返回格式
            Map<String, Object> result = new HashMap<String, Object>(3) {{
                put("url", "");
                put("success", 1);
                put("message", "upload success!");
            }};
    
            return result;
        }
    }
    

    就是利用ConfigurationAuthUploadManager来上传文件和获取上传后的返回信息,使用auth.upToken()来获取上传需要的token信息,然后uploadManager.put()来上传文件。

    相关文章

      网友评论

          本文标题:springboot上传文件到七牛云

          本文链接:https://www.haomeiwen.com/subject/dyzldctx.html