七牛云创建对象存储
- 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;
}
}