七牛雲建立對象存儲
- 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;
}
}