天天看點

七牛雲建立對象存儲

七牛雲建立對象存儲

  • ​​1.注冊​​
  • ​​2.添加對象存儲​​
  • ​​3.Java上傳​​
  • ​​3.1 Controller​​
  • ​​3.2 Service​​

1.注冊

七牛雲官網:​​https://portal.qiniu.com/​​

2.添加對象存儲

3.Java上傳

<dependency>
     <groupId>com.qiniu</groupId>
     <artifactId>qiniu-java-sdk</artifactId>
     <version>7.2.12</version>
</dependency>      

3.1 Controller

package cn.tianyustudio.musicpartner_api.controller.interval;

import cn.tianyustudio.musicpartner_api.exception.BusinessException;
import cn.tianyustudio.musicpartner_api.global.Constant;
import cn.tianyustudio.musicpartner_api.service.UploadService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpSession;

@Api(tags = "檔案上傳接口")
@RestController
@RequestMapping("interval/upload")
public class UploadController {
    private UploadService uploadService;
    private HttpSession session;

    public UploadController(UploadService uploadService, HttpSession session) {
        this.uploadService = uploadService;
        this.session = session;
    }

    @ApiOperation("上傳檔案")
    @PostMapping(consumes = "multipart/*", headers = "content-type=multipart/form-data")
    public String upload(@RequestParam("file") MultipartFile file) throws BusinessException{
        Long userId = (Long) session.getAttribute(Constant.KEY_ID);
        if (null == userId){
            throw new BusinessException("請先登入!");
        }
        return Constant.QINIU_URL + uploadService.upload(file);
    }
}      

3.2 Service

package cn.tianyustudio.musicpartner_api.service;

import cn.tianyustudio.musicpartner_api.exception.BusinessException;
import cn.tianyustudio.musicpartner_api.global.Constant;
import com.google.gson.Gson;
import com.qiniu.common.Zone;
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.StringMap;
import com.qiniu.util.UrlSafeBase64;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.ByteArrayInputStream;
import java.util.UUID;

@Service
public class UploadService {

    public String upload(MultipartFile file) throws BusinessException{
        String fileType = verifyFile(file);

        try {
            return toUpload(file.getBytes(), fileType);
        }catch (Exception e){
            e.printStackTrace();
            throw new BusinessException("上傳失敗!");
        }
    }

    private String verifyFile(MultipartFile file) throws BusinessException {
        Long fileSize = file.getSize();
        boolean flag = true;
        if (file.isEmpty()){
            throw new BusinessException("檔案為空!");
        }
        if (fileSize > Constant.VIDEO_MAX_SIZE){
            throw new BusinessException("檔案太大無法上傳!");
        }
        // 檔案原名
        String fileNameOriginal = file.getOriginalFilename();
        String mimeType = file.getContentType();

        if (mimeType.startsWith("image/")) {
            if (fileSize > Constant.IMG_MAX_SIZE){
                throw new BusinessException("圖檔太大無法上傳!");
            }
            flag = false;
        }

        if(fileNameOriginal.endsWith(".ove")){
            if (fileSize > Constant.IMG_MAX_SIZE){
                throw new BusinessException("ove檔案太大無法上傳!");
            }
            flag = false;
        }

        if (mimeType.startsWith("audio/")) {
            if (fileSize > Constant.MUSIC_MAX_SIZE){
                throw new BusinessException("聲音太大無法上傳!");
            }
            flag = false;
        }

        if (mimeType.startsWith("video/")) {
            if (fileSize > Constant.VIDEO_MAX_SIZE){
                throw new BusinessException("視訊太大無法上傳!");
            }
            flag = false;
        }

        if (flag){
            throw new BusinessException("檔案格式不合法!");
        }

        return fileNameOriginal.substring(fileNameOriginal.lastIndexOf(".") + 1);
    }
    /**
    String QINIU_ACCESSKEY = "你的七牛雲AK";
    String QINIU_SECRETKEY = "你的七牛雲SK";
    String QINIU_BUCKET = "建立對象存儲的名字";
    String QINIU_URL = "融合 CDN 測試域名";
    ===================以下是随便輸入的=======================
    String QINIU_ACCESSKEY = "n1k2888VJz-Z54442jA7_744iAkY8888NJU44dvdd";
    String QINIU_SECRETKEY = "x234X4u2afafd52i4GUg3pgadfafdWydfadaf444C";
    String QINIU_BUCKET = "JackWei";
    String QINIU_URL = "http://pz123HIhahfido.bkt.clouddn.com/";
    */

    private String toUpload(byte[] file, String fileType) throws Exception{
        //構造一個帶指定 Region 對象的配置類
        Configuration cfg = new Configuration(Zone.huadong());
        //...其他參數參考類注釋
        UploadManager uploadManager = new UploadManager(cfg);

        //預設不指定key的情況下,以檔案内容的hash值作為檔案名
        String key = UUID.randomUUID().toString() +"."+ fileType;

        //...生成上傳憑證,然後準備上傳
        ByteArrayInputStream byteInputStream=new ByteArrayInputStream(file);
        Auth auth = Auth.create(Constant.QINIU_ACCESSKEY, Constant.QINIU_SECRETKEY);

        String upToken = auth.uploadToken(Constant.QINIU_BUCKET);

        Response response = uploadManager.put(byteInputStream,key,upToken,null, null);
        //解析上傳成功的結果
        DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
        return putRet.key;
    }
}      

繼續閱讀