其他分享
首页 > 其他分享> > 七牛云对象存储

七牛云对象存储

作者:互联网

七牛云对象存储

在实际开发中,遇到文件上传、下载这是无可避免的,但是文件上传到本地,就占用本地资源,这样就会影响性能,所有可以把文件上传到指定服务器,这里就可以使用七牛云对象存储,把图片视频存储到七牛云,需要使用就使用外链地址直接可以访问

开始

这两处需要记录一下,在后面开发需要使用
在这里插入图片描述

参考官方文件进行开发文件上传

https://developer.qiniu.com/kodo/sdk/1239/java#1

安装

使用Maven,jar包版本去7.4.0~7.4.99之间的,比如:7.4.0取不到就区7.4.1依次往后

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

鉴权

键查密钥管理是否有,参考第一张图片
在这里插入图片描述

文件上传

在第一张图片中指定了密钥、地区,在实现文件上传的时候就需要指定地区了,地区分为华东、华北、华南、北美、东南亚

机房Region
华东Region.region0(), Region.huadong()
华北Region.region1(), Region.huabei()
华南Region.region2(), Region.huanan()
北美Region.regionNa0(), Region.beimei()
东南亚Region.regionAs0(), Region.xinjiapo()

编写文件上传工具类

application.properties

qiniuyun.accessKey=
qiniuyun.secretKey=
#设置对象存储名称
qiniuyun.bucket=storage-images-sunweijie
#图片外链地址前缀,用于显示图片
qiniuyun.OuterChain=http://qll7sx8y9.hn-bkt.clouddn.com/

工具类:

package com.swj.util;

import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.io.InputStream;
import java.util.UUID;

/**
 * 文件上传工具类
 */
@Component
@org.springframework.context.annotation.Configuration
public class UploadFileUtil {
    @Value("${qiniuyun.accessKey}")
    private String accessKey;
    @Value("${qiniuyun.secretKey}")
    private String secretKey;
    @Value("${qiniuyun.bucket}")
    private String bucket;
    @Value("${qiniuyun.OuterChain}")
    private String OuterChain;

    /**
     * 上传文件并且返回文件地址
     *
     * @param inputStream 文件
     */
    public void setUploadManager(InputStream inputStream) {
        //设置密钥、文件连接、文件名等等属性
        //构造一个带指定 Region 对象的配置类
        Configuration cfg = new Configuration(Region.huanan());
        //...其他参数参考类注释
        UploadManager uploadManager = new UploadManager(cfg);
        //设置连接地址
        Auth auth = Auth.create(accessKey, secretKey);
        String prefix = "";
        int Guid = 100;
        try {
            String s = auth.uploadToken(bucket);
            //生成文件名
            String s1 = UUID.randomUUID().toString();
            //实现文件上传
            Response response = uploadManager.put(inputStream, s1, s, null, null);
            //解析上传成功结果
            DefaultPutRet defaultPutRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
            System.out.println("文件外链地址:" + OuterChain + defaultPutRet.key);
            System.out.println("defaultPutRet.hash = " + defaultPutRet.hash);
        } catch (QiniuException e) {
            System.out.println("e.getMessage() = " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Controller

package com.swj.controller;

import com.swj.util.UpdateFileUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

@Controller
public class uploadController {
    @Autowired
    private UploadFileUtil upload;

    //跳转到index
    @GetMapping("/")
    public String getIndex() {
        return "index";
    }

    @PostMapping("/upload")
    public void upload(@RequestParam("file") MultipartFile file, HttpServletRequest request, HttpServletResponse response) {

        //获取文件名
        String originalFilename = file.getOriginalFilename();
        String endName = originalFilename.split("\\.")[1];
        String name = endName.toLowerCase();
        //判断是否是指定类
        List<String> fileType = Arrays.asList("gif", "jpg", "jfif", "ico", "png", "bmp", "svg");
        if (!fileType.contains(name)) {
            System.out.println("文件类型错误");
        }
        //文件名
        try {
            upload.setUploadManager(file.getInputStream());
            System.out.println(" 文件上传成功 ");
        } catch (IOException e) {
            System.out.println(" 文件上传失败 ");
            e.printStackTrace();
        }
    }
}

html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file" id="">
    <input type="submit" value="添加">
</form>
<img src="http://qll7sx8y9.hn-bkt.clouddn.com/0b17dfce-5840-4f5c-8d52-627d8e12eb45"
     style="width: 500px;height: 400px;"
     alt="">
</body>
</html>

总结:这些在官方文档中都是有写的,我们可以根据一下代码自己编写一个工具类:https://developer.qiniu.com/kodo/sdk/1239/java#upload-file

//构造一个带指定 Region 对象的配置类
Configuration cfg = new Configuration(Region.region0());
//...其他参数参考类注释

UploadManager uploadManager = new UploadManager(cfg);
//...生成上传凭证,然后准备上传
String accessKey = "your access key";
String secretKey = "your secret key";
String bucket = "your bucket name";
//如果是Windows情况下,格式是 D:\\qiniu\\test.png
String localFilePath = "/home/qiniu/test.png";
//默认不指定key的情况下,以文件内容的hash值作为文件名
String key = null;

Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);

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);
} catch (QiniuException ex) {
    Response r = ex.response;
    System.err.println(r.toString());
    try {
        System.err.println(r.bodyString());
    } catch (QiniuException ex2) {
        //ignore
    }
}

标签:存储,七牛云,String,对象,上传,Region,qiniu,import,com
来源: https://blog.csdn.net/qq_41498751/article/details/111467645