七牛云的文件上传与删除 基于springboot
话不多说直接上代码:
maven依赖
<!-- 七牛云 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.31</version>
</dependency>
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>[7.2.0, 7.2.99]</version>
</dependency>
<!--七牛云-->
controller层servlet
@RestController
@RequestMapping("qny")
public class QnyServlet {
@Autowired
private QnyService qnyService;
//删除文件
@RequestMapping("deletemp")
public ResponseResult deletemap(String fileKey){
return qnyService.delete(fileKey);
}
//上传文件
@RequestMapping(value = "testUpload", method = RequestMethod.POST)
@ResponseBody
public ResponseResult uploadImage(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
return qnyService.test(file);
}
}
接口service
public interface QnyService {
public ResponseResult test(MultipartFile file);
public ResponseResult delete(String fileKey);
}
service接口的实现
@Service
public class QnyserviceImp implements QnyService{
@Override
public ResponseResult test(MultipartFile file) {
ResponseResult responseResult=new ResponseResult();
String res=Qnyutil.uploadFile(file,FileUtil.IMAGE_FILE_EXTD);
responseResult.setMessage(res);
return responseResult;
}
@Override
public ResponseResult delete(String fileKey) {
Integer res = Qnyutil.delete(fileKey);
ResponseResult responseResult=new ResponseResult();
responseResult.setCode(res);
return responseResult;
}
}
判断文件类型的工具类
public class FileUtil {
// 图片允许的后缀扩展名
public static String[] IMAGE_FILE_EXTD = new String[] { "png", "bmp", "jpg", "jpeg","pdf","xlsx","xls" };
public static String[] IMAGE_FILE_EXTD1 = new String[] { "png", "bmp", "jpg", "jpeg"};
public static String[] IMAGE_FILE_EXTD2 = new String[] { "pdf"};
public static String[] IMAGE_FILE_EXTD3 = new String[] { "xlsx","xls"};
public static boolean isFileAllowed(String fileName) {
for (String ext : IMAGE_FILE_EXTD) {
if (ext.equals(fileName)) {
return true;
}
}
return false;
}
public static boolean isFileAllowed(String fileName,String[] file) {
for (String ext : file) {
if (ext.equals(fileName)) {
return true;
}
}
return false;
}
}
上传到七牛云的工具类
@Component
public class Qnyutil {
// 设置好账号的ACCESS_KEY和SECRET_KEY
public static String ACCESS_KEY = "#####写自己的access####";
public static String SECRET_KEY = "#####写自己的sec####";
// 要上传的空间
public static String bucketname = "#####写自己的存储空间名字####";
// 密钥配置
public static Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
// 构造一个带指定Zone对象的配置类,不同的七云牛存储区域调用不同的zone
public static Configuration cfg = new Configuration(Zone.zone2());
// ...其他参数参考类注释
public static UploadManager uploadManager = new UploadManager(cfg);
// 测试域名,只有30天有效期
private static String QINIU_IMAGE_DOMAIN = "http://qldlxgj0k.hn-bkt.clouddn.com/";
// 简单上传,使用默认策略,只需要设置上传的空间名就可以了
public static String getUpToken() {
return auth.uploadToken(bucketname);
}
public static String uploadFile(MultipartFile file,String[] fileSuffix) {
try {
//判断文件是否为空
if (file.isEmpty()) {
return "文件不能为空";
}
//判断文件后缀名是否合法
int dotPos = file.getOriginalFilename().lastIndexOf(".");
if (dotPos < 0) {
return "文件名不合法";
}
String fileExt = file.getOriginalFilename().substring(dotPos + 1).toLowerCase();
// 判断是否是合法的文件后缀
if (!FileUtil.isFileAllowed(fileExt, fileSuffix)) {
return "上传文件类型错误";
}
String fileName = UUID.randomUUID().toString().replaceAll("-", "") + "." + fileExt;
// 调用put方法上传
Response res = uploadManager.put(file.getBytes(), fileName, getUpToken());
// 打印返回的信息
if (res.isOK() && res.isJson()) {
// 返回这张存储照片的地址
return String.valueOf(JSONObject.parseObject(res.bodyString()).get("key"));
} else {
return "上传失败";
}
}catch (Exception e){
return "上传异常";
}
}
public static String uploadFile(MultipartFile file) {
try {
//判断文件是否为空
if (file.isEmpty()) {
return "文件不能为空";
}
//判断文件后缀名是否合法
int dotPos = file.getOriginalFilename().lastIndexOf(".");
if (dotPos < 0) {
return "文件名不合法";
}
String fileExt = file.getOriginalFilename().substring(dotPos + 1).toLowerCase();
// 判断是否是合法的文件后缀
if (!FileUtil.isFileAllowed(fileExt)) {
return "上传文件类型错误";
}
String fileName = UUID.randomUUID().toString().replaceAll("-", "") + "." + fileExt;
// 调用put方法上传
Response res = uploadManager.put(file.getBytes(), fileName, getUpToken());
// 打印返回的信息
if (res.isOK() && res.isJson()) {
// 返回这张存储照片的地址
return String.valueOf(JSONObject.parseObject(res.bodyString()).get("key"));
} else {
return "上传失败";
}
}catch (Exception e){
return "上传异常";
}
}
public static Integer delete(String key){
BucketManager bucketManager = new BucketManager(auth, cfg);
try {
bucketManager.delete("sybida", key);
return 1;
} catch (Exception ex) {
return 0;
}
}
}
前端页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="/sybida/layui/css/layui.css" media="all">
<link rel="stylesheet" href="/sybida/bs/bootstrap.min.css">
</script>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data" id="ff">
<input type="file" name="file" id="nfile"/>
<input type="button" id="btn" value="上传">
</form>
<span id="spinfo"></span>
</body>
<script src="/sybida/jquery/jquery-3.3.1.min.js"></script>
<script src="/sybida/layui/layui.js" charset="utf-8"></script>
<script src="/sybida/bs/bootstrap.min.js"></script>
<script type="text/javascript">
$("#btn").click(function () {
var formData = new FormData(document.getElementById('ff'));
formData.append("file", $("#nfile")[0].files[0]);
$.ajax({
type: "post",
url: url+"qny/testUpload",
data: formData,
cache: false, // 不缓存
processData: false, // jQuery不要去处理发送的数据
contentType: false, // jQuery不要去设置Content-Type请求头
success: function (data) {
$("#spinfo").html(data.message)
},
error:function () {
alert("上传出错");
}
});
})
</script>
</html>