springboot上传文件到七牛云

本来一开始是写把图片上传到七牛云的,然后发现上传后访问图片,需要使用自己的备案的域名(之前的域名过期了),于是转向阿里云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 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 result = new HashMap(3) {{
            put("url", "");
            put("success", 1);
            put("message", "upload success!");
        }};

        return result;
    }
}

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

你可能感兴趣的:(springboot上传文件到七牛云)