zoukankan      html  css  js  c++  java
  • 七牛云java(服务端)通用工具类

    前言

    需要安装lombok插件。

    功能列表

    • 上传本地文件
    • 上传Base64图片
    • 获取文件访问地址
    • 上传MultipartFile

    代码

    pom.xml

    <dependency>
    	<groupId>com.qiniu</groupId>
    	<artifactId>qiniu-java-sdk</artifactId>
    	<version>[7.2.0, 7.2.99]</version>
    </dependency>
    <dependency>
    	<groupId>org.projectlombok</groupId>
    	<artifactId>lombok</artifactId>
    	<version>1.18.2</version>
    	<scope>provided</scope>
    </dependency>
    

    qiniu.properties

    # 七牛云配置
    qiniu.access-key=你的accessKey
    qiniu.secret-key=你的secretKey
    qiniu.bucket=你的存储空间名称
    # [{'zone0':'华东'}, {'zone1':'华北'},{'zone2':'华南'},{'zoneNa0':'北美'},{'zoneAs0':''}]
    qiniu.zone=zone0
    qiniu.domain-of-bucket=外链默认域名
    # 链接过期时间,单位是秒,3600代表1小时,-1代表永不过期
    qiniu.expire-in-seconds=-1
    

    QiNiuConfig.java

    import com.qiniu.common.Zone;
    import lombok.Data;
    import lombok.extern.slf4j.Slf4j;
    
    import java.util.Properties;
    
    /**
     * 七牛云配置
     *
     * @author simon
     * @create 2018-08-15 10:44
     **/
    @Slf4j
    @Data
    public class QiNiuConfig {
        private String accessKey;
        private String secretKey;
        private String bucket;
        private Zone zone;
        private String domainOfBucket;
        private long expireInSeconds;
    
        private static QiNiuConfig instance = new QiNiuConfig();
    
        private QiNiuConfig(){
            Properties prop = new Properties();
            try {
                prop.load(QiNiuConfig.class.getResourceAsStream("/qiniu.properties"));
                accessKey = prop.getProperty("qiniu.access-key");
                secretKey = prop.getProperty("qiniu.secret-key");
                bucket = prop.getProperty("qiniu.bucket");
                domainOfBucket = prop.getProperty("qiniu.domain-of-bucket");
                expireInSeconds = Long.parseLong(prop.getProperty("qiniu.expire-in-seconds"));
                String zoneName = prop.getProperty("qiniu.zone");
                if(zoneName.equals("zone0")){
                    zone = Zone.zone0();
                }else if(zoneName.equals("zone1")){
                    zone = Zone.zone1();
                }else if(zoneName.equals("zone2")){
                    zone = Zone.zone2();
                }else if(zoneName.equals("zoneNa0")){
                    zone = Zone.zoneNa0();
                }else if(zoneName.equals("zoneAs0")){
                    zone = Zone.zoneAs0();
                }else{
                    throw new Exception("Zone对象配置错误!");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public static QiNiuConfig getInstance(){
            return instance;
        }
        public static void main(String[] args) {
            System.out.println(QiNiuConfig.getInstance().getAccessKey());
        }
    }
    

    QiNiuUtil.java

    import com.google.gson.Gson;
    import com.qiniu.common.QiniuException;
    import com.qiniu.http.Response;
    import com.qiniu.storage.Configuration;
    import com.qiniu.storage.UploadManager;
    import com.qiniu.storage.model.DefaultPutRet;
    import com.qiniu.util.Auth;
    import com.qiniu.util.UrlSafeBase64;
    import lombok.extern.slf4j.Slf4j;
    import okhttp3.OkHttpClient;
    import okhttp3.Request;
    import okhttp3.RequestBody;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.UnsupportedEncodingException;
    import java.net.URLEncoder;
    
    /**
     * 七牛上传下载工具类
     *
     * @author simon
     * @create 2018-08-15 11:21
     **/
    @Slf4j
    public class QiNiuUtil {
        /**
         * 上传本地文件
         * @param localFilePath 本地文件完整路径
         * @param key 文件云端存储的名称
         * @param override 是否覆盖同名同位置文件
         * @return
         */
        public static boolean upload(String localFilePath, String key, boolean override){
            //构造一个带指定Zone对象的配置类
            Configuration cfg = new Configuration(QiNiuConfig.getInstance().getZone());
            //...其他参数参考类注释
            UploadManager uploadManager = new UploadManager(cfg);
            //...生成上传凭证,然后准备上传
            Auth auth = Auth.create(QiNiuConfig.getInstance().getAccessKey(), QiNiuConfig.getInstance().getSecretKey());
            String upToken;
            if(override){
                upToken = auth.uploadToken(QiNiuConfig.getInstance().getBucket(), key);//覆盖上传凭证
            }else{
                upToken = auth.uploadToken(QiNiuConfig.getInstance().getBucket());
            }
            try {
                Response response = uploadManager.put(localFilePath, key, upToken);
                //解析上传成功的结果
                DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
                System.out.println(putRet.key);
                System.out.println(putRet.hash);
                return true;
            } catch (QiniuException ex) {
                Response r = ex.response;
                System.err.println(r.toString());
                try {
                    System.err.println(r.bodyString());
                } catch (QiniuException ex2) {
                    //ignore
                    return false;
                }
                return false;
            }
        }
    
        /**
         * 上传Base64图片
         * @param l 图片没经过base64处理的原图字节大小,获取文件大小的时候,切记要通过文件流的方式获取。而不是通过图片标签然后转换后获取。
         * @param file64 图片base64字符串
         * @param key 文件云端存储的名称
         * @param override 是否覆盖同名同位置文件
         * @return
         * @throws IOException
         */
        public static boolean uploadBase64(int l, String file64, String key, boolean override) throws IOException{
            /*FileInputStream fis = null;
            int l = (int) (new File(localFilePath).length());
            byte[] src = new byte[l];
            try {
                fis = new FileInputStream(new File(localFilePath));
                fis.read(src);
            }catch (FileNotFoundException e){
                e.printStackTrace();
                log.error(e.getMessage());
                log.error("图片文件读取失败");
                return false;
            }
            String file64 = Base64.encodeToString(src, 0);*/
    
            Auth auth = getAuth();
            String upToken;
            if(override){
                upToken = auth.uploadToken(QiNiuConfig.getInstance().getBucket(), key);//覆盖上传凭证
            }else{
                upToken = auth.uploadToken(QiNiuConfig.getInstance().getBucket());
            }
    
            String url = "http://upload.qiniup.com/putb64/" + l+"/key/"+ UrlSafeBase64.encodeToString(key);
            //非华东空间需要根据注意事项 1 修改上传域名
            RequestBody rb = RequestBody.create(null, file64);
            Request request = new Request.Builder().
                    url(url).
                    addHeader("Content-Type", "application/octet-stream")
                    .addHeader("Authorization", "UpToken " + upToken)
                    .post(rb).build();
            //System.out.println(request.headers());
            OkHttpClient client = new OkHttpClient();
            okhttp3.Response response = client.newCall(request).execute();
            //System.out.println(response);
            return response.isSuccessful();
        }
    
        /**
         * 获取文件访问地址
         * @param fileName 文件云端存储的名称
         * @return
         * @throws UnsupportedEncodingException
         */
        public static String fileUrl(String fileName) throws UnsupportedEncodingException {
            String encodedFileName = URLEncoder.encode(fileName, "utf-8");
            String publicUrl = String.format("%s/%s", QiNiuConfig.getInstance().getDomainOfBucket(), encodedFileName);
            Auth auth = getAuth();
            long expireInSeconds = QiNiuConfig.getInstance().getExpireInSeconds();
            if(-1 == expireInSeconds){
                return auth.privateDownloadUrl(publicUrl);
            }
            return auth.privateDownloadUrl(publicUrl, expireInSeconds);
        }
    
        /**
         * 上传MultipartFile
         * @param file
         * @param key
         * @param override
         * @return
         * @throws IOException
         */
        public static boolean uploadMultipartFile(MultipartFile file, String key, boolean override) {
            //构造一个带指定Zone对象的配置类
            Configuration cfg = new Configuration(QiNiuConfig.getInstance().getZone());
            //...其他参数参考类注释
            UploadManager uploadManager = new UploadManager(cfg);
    
            //把文件转化为字节数组
            InputStream is = null;
            ByteArrayOutputStream bos = null;
    
            try {
                is = file.getInputStream();
                bos = new ByteArrayOutputStream();
                byte[] b = new byte[1024];
                int len = -1;
                while ((len = is.read(b)) != -1){
                    bos.write(b, 0, len);
                }
                byte[] uploadBytes= bos.toByteArray();
    
                Auth auth = getAuth();
                String upToken;
                if(override){
                    upToken = auth.uploadToken(QiNiuConfig.getInstance().getBucket(), key);//覆盖上传凭证
                }else{
                    upToken = auth.uploadToken(QiNiuConfig.getInstance().getBucket());
                }
                //默认上传接口回复对象
                DefaultPutRet putRet;
                //进行上传操作,传入文件的字节数组,文件名,上传空间,得到回复对象
                Response response = uploadManager.put(uploadBytes, key, upToken);
                putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
                System.out.println(putRet.key);//key 文件名
                System.out.println(putRet.hash);//hash 七牛返回的文件存储的地址,可以使用这个地址加七牛给你提供的前缀访问到这个视频。
                return true;
            }catch (QiniuException e){
                e.printStackTrace();
                return false;
            }catch (IOException e) {
                e.printStackTrace();
                return false;
            }
        }
    
        public static Auth getAuth(){
            Auth auth = Auth.create(QiNiuConfig.getInstance().getAccessKey(), QiNiuConfig.getInstance().getSecretKey());
            return auth;
        }
    }
    

    推荐

    oauthserver是一个基于Spring Boot Oauth2的完整的独立的Oauth2 Server微服务。仅仅需要创建相关数据表,修改数据库的连接信息,你就可以得到一个Oauth2 Server微服务。

  • 相关阅读:
    java多线程开发容易犯的错误
    个性化推荐系统(九)--- 电商商品个性化推荐系统
    servlet的生命周期
    Servlet的执行过程
    Tomcat发布项目的几种方式
    xml文件解析
    linux执行wget url时提示“无法建立 SSL 连接”
    Linux使用yum install 安装程序时,提示“另外一个程序锁定了 yum;等待它退出……”
    线程状态
    单例模式和多线程
  • 原文地址:https://www.cnblogs.com/rainmer/p/9483147.html
Copyright © 2011-2022 走看看