首页 > 技术文章 > java七牛云文件上传, 删除

JerryTomcat 2020-04-03 17:56 原文

前言

七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化PaaS服务。围绕富媒体场景,七牛先后推出了对象存储,融合CDN加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

 

第一步:去七牛云注册账号,然后去控制台创建存储空间

 

 第二步:在七牛云创建完空间后,给空间配置访问域名

 

 

 

 添加完域名后点击确定,此时域名添加成功并复制CNAME

 

 第三步:给域名添加记录值,选择CNAME类型,此时七牛云空间就可以访问了

 

然后再个人中心中复制需要的秘钥

 

 

 

第四步:在Java项目的maven中添加两个七牛jar包

 

 填写工具类

import com.alibaba.fastjson.JSONObject;
import com.qiniu.common.QiniuException;
import com.qiniu.common.Zone;
import com.qiniu.http.Response;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.UUID;
@Service
public class Qiniu {
// 设置好账号的ACCESS_KEY和SECRET_KEY
private String ACCESS_KEY = "####################";
private String SECRET_KEY = "####################";
// 要上传的空间
String bucketname = "###";

// 密钥配置
Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
// 构造一个带指定Zone对象的配置类,不同的七云牛存储区域调用不同的zone
Configuration cfg = new Configuration(Zone.zone0());
// ...其他参数参考类注释
UploadManager uploadManager = new UploadManager(cfg);

// 测试域名,只有30天有效期
private static String QINIU_IMAGE_DOMAIN = "http://###############/";

// 简单上传,使用默认策略,只需要设置上传的空间名就可以了
public String getUpToken() {
return auth.uploadToken(bucketname);
}

public String saveImage(MultipartFile file) throws IOException {
try {
int dotPos = file.getOriginalFilename().lastIndexOf(".");
if (dotPos < 0) {
return null;
}
String fileExt = file.getOriginalFilename().substring(dotPos + 1).toLowerCase();
// 判断是否是合法的文件后缀
if (!isFileAllowed(fileExt)) {
return null;
}

String fileName = UUID.randomUUID().toString().replaceAll("-", "") + "." + fileExt;
// 调用put方法上传
Response res = uploadManager.put(file.getBytes(), fileName, getUpToken());
// 打印返回的信息
if (res.isOK() && res.isJson()) {
// 返回这张存储照片的地址
return QINIU_IMAGE_DOMAIN + JSONObject.parseObject(res.bodyString()).get("key");
} else {
return null;
}
} catch (QiniuException e) {
// 请求失败时打印的异常的信息
return null;
}
}
// 图片允许的后缀扩展名
private static String[] IMAGE_FILE_EXTD = new String[] { "png", "bmp", "jpg", "jpeg","pdf" };

private static boolean isFileAllowed(String fileName) {
for (String ext : IMAGE_FILE_EXTD) {
if (ext.equals(fileName)) {
return true;
}
}
return false;
}

//删除文件
public int deleteFileFromQiniu(String fileName){
//构造一个带指定Zone对象的配置类
Configuration cfg = new Configuration(Zone.zone0());
String key = fileName;
Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
BucketManager bucketManager = new BucketManager(auth, cfg);
try {
Response delete = bucketManager.delete(bucketname, key);
return delete.statusCode;
} catch (QiniuException ex) {
//如果遇到异常,说明删除失败
ex.printStackTrace();
System.err.println(ex.code());
System.err.println(ex.response.toString());
}
return -1;
}
}


/**
* 七牛云上传
* @param file
* @return
*/
@PostMapping("saveImage")
@ResponseBody
public Object saveImage(@RequestParam("file")MultipartFile file){

if (file.isEmpty()){
return "error";
}

try {
Map<String, Object> map2 = new HashMap<>();
Map<String, Object> map = new HashMap<>();
map.put("code", 0);
map.put("msg", "");
map2.put("src", qiniu.saveImage(file));
map.put("data", map2);
return map;
}catch (Exception e){
e.printStackTrace();
}
return"fail";
}

/**
* 七牛云删除
* @param fileName
* @return
*/
@PostMapping("deleteImage")
@ResponseBody
public int deleteImage(String fileName){
return qiniu.deleteFileFromQiniu(fileName);
}

推荐阅读