七牛雲物件儲存

qq_41498751發表於2020-12-21

七牛雲物件儲存

在實際開發中,遇到檔案上傳、下載這是無可避免的,但是檔案上傳到本地,就佔用本地資源,這樣就會影響效能,所有可以把檔案上傳到指定伺服器,這裡就可以使用七牛雲物件儲存,把圖片視訊儲存到七牛雲,需要使用就使用外鏈地址直接可以訪問

開始

這兩處需要記錄一下,在後面開發需要使用
在這裡插入圖片描述

參考官方檔案進行開發檔案上傳

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()
  • 若不指定 RegionRegion.autoRegion() ,則會使用 自動判斷 區域,使用相應域名處理。

編寫檔案上傳工具類

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
    }
}

相關文章