抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

写在前面

七牛云上传图片的文章不在少数,但他们只是使用了七牛云给的测试域名,作为一个站长把自己的域名升级为https之后,强迫症患者是不允许浏览器出现不安全这三个字的,当然了使用七牛云绑定自己域名时也会出现一些小坑。为了更好的维护自己的网站,对众人来说不一定是完美的,但尽力做到最好的!

准备工作

  1. 因为我的个人服务器是阿里云的,所以我在我的阿里云上申请了一个二级域名(阿里云二级域名如何申请:点这里
  2. 再次二级域名申请完成之后,需要购买一个ssl证书,阿里云有免费证书再申请一个即可!
  3. 并且下载ssl证书!(不需要Nginx等配置。)

七牛云配置

新建存储空间

https://img-blog.csdnimg.cn/20200324142844732.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MzU3MjQy,size_16,color_FFFFFF,t_70
空间名称可以自定义,访问控制选择公开。

https://img-blog.csdnimg.cn/20200617103031299.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MzU3MjQy,size_16,color_FFFFFF,t_70

此时你就新建完成了。

配置域名

上传https证书,一级域名证书,二级域名证书首先要上传到七牛云上。
https://img-blog.csdnimg.cn/20200617105705643.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MzU3MjQy,size_16,color_FFFFFF,t_70

空间管理里点击域名即可配置域名,首先绑定一级域名,再新绑定二级域名,绑定完成如下。

https://img-blog.csdnimg.cn/20200617105922232.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MzU3MjQy,size_16,color_FFFFFF,t_70

当然此处有坑,如果不进行cname,会出现如下问题。

https://img-blog.csdnimg.cn/20200617111020426.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MzU3MjQy,size_16,color_FFFFFF,t_70

如果直接在一级域名cname,也就是在阿里云新建一个cname,记录值和-A一直,那么就会冲突。如果直接修改-A那么就会出现如下问题

https://img-blog.csdnimg.cn/20200617111149606.png

所以才需要一个二级域名!

代码实现

pom引入jar包

<!--七牛服务器-->
        <dependency>
            <groupId>com.qiniu</groupId>
            <artifactId>qiniu-java-sdk</artifactId>
            <version>7.2.11</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>3.3.1</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.6.2</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.qiniu</groupId>
            <artifactId>happy-dns-java</artifactId>
            <version>0.1.4</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>3.3.1</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.6.2</version>
            <scope>compile</scope>
        </dependency>
        <!-- 请求头参数分析包 -->
        <dependency>
            <groupId>eu.bitwalker</groupId>
            <artifactId>UserAgentUtils</artifactId>
            <version>1.20</version>
        </dependency>
        <!--七牛云上传图片服务-->
        <dependency>
            <groupId>com.qiniu</groupId>
            <artifactId>sdk</artifactId>
            <version>6.1.0</version>
        </dependency>

配置SDK

这个sdk在你七牛云的秘钥管理下就有

 *   类作用描述:命名类
 *   创建时间:2018/12/1 17:54
 *   构造方法参数:
 *   修改时间:2018/12/1 17:54
 *   创建者:Aqian666
 **/
public class QiNiuSdk {
    //    七牛AK
    public static final String accessKey = "ak";
    //    七牛SK
    public static final String secretKey = "sk";
    //    七牛存储空间名
    public static final String bucket = "空间名";
    //    七牛默认域名
    public static final String domain = "二级域名";
}

代码实现

 *   类作用描述:上传图片到服务器
 *   创建时间:2018/12/1 17:54
 *   构造方法参数:
 *   修改时间:2018/12/1 17:54
 *   创建者:ZENG
 *   类全限定名称:com.hyxiaojingyu.common.QiniuUpload
 **/
public class QiniuUpload {
 
    //设置好账号的ACCESS_KEY和SECRET_KEY
    private static String ACCESS_KEY = QiNiuSdk.accessKey; //这两个登录七牛 账号里面可以找到
    private static String SECRET_KEY = QiNiuSdk.secretKey;
 
    //要上传的空间
    private static String bucketname = QiNiuSdk.bucket; //对应要上传到七牛上 你的那个路径(自己建文件夹 注意设置公开)
 
    //密钥配置
    private static Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
    private static Configuration cfg = new Configuration(Zone.huanan());
    //创建上传对象
 
    private static UploadManager uploadManager = new UploadManager(cfg);
 
    //简单上传,使用默认策略,只需要设置上传的空间名就可以了
    public static String getUpToken(){
        return auth.uploadToken(bucketname);
    }
 
 
    public static String UploadPic(String FilePath,String FileName){
        Configuration cfg = new Configuration(Zone.huanan());
        UploadManager uploadManager = new UploadManager(cfg);
        String accessKey = QiNiuSdk.accessKey;      //AccessKey的值
        String secretKey = QiNiuSdk.secretKey;      //SecretKey的值
        String bucket = QiNiuSdk.bucket;                                          //存储空间名
        Auth auth = Auth.create(accessKey, secretKey);
        String upToken = auth.uploadToken(bucket);
        try {
            Response response = uploadManager.put(FilePath, FileName, upToken);
            //解析上传成功的结果
            DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
            System.out.println(putRet.key);
            System.out.println(putRet.hash);
            return QiNiuSdk.domain+FileName;
        }catch (QiniuException ex){
            Response r = ex.response;
            System.err.println(r.toString());
            try {
                System.err.println(r.bodyString());
            } catch (QiniuException ex2) {
                //ignore
            }
        }
        return null;
    }
 
    public static String updateFile(MultipartFile file, String filename) throws Exception {
        //默认不指定key的情况下,以文件内容的hash值作为文件名
        try {
            InputStream inputStream=file.getInputStream();
            ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
            byte[] buff = new byte[600]; //buff用于存放循环读取的临时数据
            int rc = 0;
            while ((rc = inputStream.read(buff, 0, 100)) > 0) {
                swapStream.write(buff, 0, rc);
            }
 
            byte[] uploadBytes  = swapStream.toByteArray();
            try {
                com.qiniu.http.Response response = uploadManager.put(uploadBytes,filename,getUpToken());
                //解析上传成功的结果
                DefaultPutRet putRet;
                putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
                return QiNiuSdk.domain+putRet.key;
 
            } catch (QiniuException ex) {
                Response r = ex.response;
                System.err.println(r.toString());
                try {
                    System.err.println(r.bodyString());
                } catch (QiniuException ex2) {
                }
            }
        } catch (UnsupportedEncodingException ex) {
        }
        return null;
    }
}

    @ResponseBody
    @PostMapping("/upload")
    public HashMap<String, Object> uploadImageByCover(MultipartFile file){
        HashMap<String,Object> result = new HashMap<>();
        try {
            // 获取文件名称
            String fileName = file.getOriginalFilename();
            //结果 2017/03/01
            String format = DateUtil.format(new Date(), "yyyy-MM-dd-HH-mm-ss");
            String newFilename = format+"-"+fileName;
 
        String s = QiniuUpload.updateFile(file, newFilename);
        result.put(&quot;msg&quot;,s);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return result;
}

测试

https://img-blog.csdnimg.cn/20200617144258331.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MzU3MjQy,size_16,color_FFFFFF,t_70

End

评论