美文网首页SpringHome
使用七牛云存储图片案例

使用七牛云存储图片案例

作者: 叩丁狼教育 | 来源:发表于2018-11-12 17:00 被阅读227次

    本文作者:陈惠,叩丁狼高级讲师。原创文章,转载请注明出处。

    现在很多的网站都会用到大量的图片,而图片是网页传输中占主要的数据量,也是影响网站性能的因素之一。因此很多网站都会将图片存储从网站中分离出来,另外搭建一个或多个服务器来存储图片,而网页上的图片都用一个URL地址来指向这些服务器上的图片的地址,这样的话网站的性能就明显提高了。图片服务器可以自己搭建,或者使用网上的云服务器,比如阿里也有,本文选用的是七牛云的对象存储来实现。在七牛云上个人注册并且实名认证成功后可免费使用储存空间10GB,用于测试是完全足够了。

    image.png

    使用步骤:

    1. 准备工作
    注册后进行实名认证,通过后可以获得AccessKey以及SecretKey,主要是后面调用接口的时候需要使用。

    2.创建存储空间
    点击”管理控制台”——> “对象存储”——>”新建存储空间”,并且填入对应的信息。

    image.png

    如果你希望用户在任何情况下都可以直接访问资源,可以直接将空间设为公开。

    3.在项目中引入七牛云提供的JAVA-SDK
    注意:此 SDK 适用于 Java 7 及以上版本

    使用maven的方式引入:

    <dependency>
      <groupId>com.qiniu</groupId>
      <artifactId>qiniu-java-sdk</artifactId>
      <version>[7.2.0, 7.2.99]</version>
    </dependency>
    
    

    这里的version指定了一个版本范围,每次更新pom.xml的时候会尝试去下载7.2.x版本中的最新版本,不过你也可以手动指定一个固定的版本。

    4.使用SDK提供的图片上传工具
    七牛文件上传分为客户端上传(主要是指网页端和移动端等面向终端用户的场景)和服务端上传两种场景,具体可以参考官方文档 ,文中使用的是服务端上传的方式。

    结合SpringMVC来上传图片到七牛云:

    /**
     * 文件上传工具
     */
    public class UploadUtil {
    
        /**
         * 上传到七牛云
         * @param file 上传的图片
         * @return 七牛云中图片的名字
         */
        public static String uploadQiniu(MultipartFile file) {
            //构造一个带指定Zone对象的配置类
            Configuration cfg = new Configuration(Zone.zone2());
            //...其他参数参考类注释
            UploadManager uploadManager = new UploadManager(cfg);
            //...生成上传凭证,然后准备上传
            String accessKey = "你的accessKey";
            String secretKey = "你的secretKey";
            //存储空间的名字
            String bucket = "wolfcode";
            //默认不指定key的情况下,以文件内容的hash值作为文件名
            String key = null;
            Auth auth = Auth.create(accessKey, secretKey);
            String upToken = auth.uploadToken(bucket);
            try {
                Response response = uploadManager.put(file.getBytes(), key, upToken);
                //解析上传成功的结果
                DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
                return putRet.key;
            } catch (QiniuException ex) {
                Response r = ex.response;
                System.err.println(r.toString());
                try {
                    System.err.println(r.bodyString());
                } catch (QiniuException ex2) {
                    //ignore
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            return null;
        }
    }
    
    

    备注:
    1 七牛存储支持空间创建在不同的机房,Zone对象是指定具体哪个机房


    image.png

    2 默认不指定key的情况下,以文件内容的hash值作为文件名,使用hash的好处还可以去除重复图片,重复上传同一张图片,在七牛云中只会占用一个图片的空间。

    3 上传成功后的返回的DefaultPutRet对象,里面包含图片的hash值,和图片的key值其实就是文件名。

    最后一步,就是访问图片了,打开对象存储空间,可以看到七牛云分配的外链域名,以及上传过的图片,把域名和图片的key值拼接在一起,就是图片的URL了,如:http://pgd3zoxnk.bkt.clouddn.com/FgaeuBs1QwDZUd9UO4betMtgZOMs

    image.png

    想获取更多技术视频,请前往叩丁狼官网:http://www.wolfcode.cn/openClassWeb_listDetail.html

    相关文章

      网友评论

      本文标题:使用七牛云存储图片案例

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