七牛云API对接详解

工具类

package com.ruoyi.common.utils;


import com.alibaba.fastjson2.JSONObject;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.FileInfo;
import com.qiniu.util.Auth;
import com.ruoyi.common.utils.uuid.UUID;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.util.Objects;

public class OSSManageUtil {

	// 设置好账号的ACCESS_KEY和SECRET_KEY
	private static String ACCESS_KEY = "个人中心中找";
	private static String SECRET_KEY = "个人中心中找";

	// 要上传的空间(创建空间的名称)
	private static String bucketName = "空间管理";

	private static String QNYUrl= "域名空间(这个一般为前缀)";

	// 密钥配置
	private static Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);

	// 构造一个带指定Region对象的配置类
	private static  Configuration cfg = new Configuration(Region.huanan());
	// ...其他参数参考类注释
	private static UploadManager uploadManager = new UploadManager(cfg);

	private static BucketManager bucketManager = new BucketManager(auth,cfg);


	private static final Logger logger = LoggerFactory.getLogger(OSSManageUtil.class);
	// 简单上传,使用默认策略,只需要设置上传的空间名就可以了
	private static String getUpToken() {
		return auth.uploadToken(bucketName);
	}

	public static String uploadFile(File file){
		try {
			if(file.length()<=0){
				logger.error("七牛云上传文件为空");
			}
			int dotPos = file.getName().lastIndexOf(".");
			if (dotPos < 0) {
				return null;
			}
			String fileExt = file.getName().substring(dotPos + 1).toLowerCase();
			String fileName = UUID.randomUUID().toString().replaceAll("-", "") + "." + fileExt;
			// 调用put方法上传
			Response res = uploadManager.put(file, fileName, getUpToken());
			// 打印返回的信息
			if (res.isOK() && res.isJson()) {
				// 返回这张存储照片的地址
				return JSONObject.parseObject(res.bodyString()).get("key").toString();
			} else {
                logger.error("七牛异常:" + res.bodyString());
				return null;
			}
		} catch (QiniuException e) {
			// 请求失败时打印的异常的信息
            logger.error("七牛异常:" + e.getMessage());
			return null;
		}
	}

	public static String uploadFile(byte[] data){
		try {
			String fileName = UUID.randomUUID().toString().replaceAll("-", "") + ".jpg";
			// 调用put方法上传
			Response res = uploadManager.put(data, fileName, getUpToken());
			// 打印返回的信息
			if (res.isOK() && res.isJson()) {
				// 返回这张存储照片的地址
				return JSONObject.parseObject(res.bodyString()).get("key").toString();
			} else {
                logger.error("七牛异常:" + res.bodyString());
				return null;
			}
		} catch (QiniuException e) {
			// 请求失败时打印的异常的信息
            logger.error("七牛异常:" + e.getMessage());
			return null;
		}
	}

	public static boolean deleteFile(String key){
		if (Objects.isNull(checkFile(key))) {
			return true;
		} else {
			try {
				bucketManager.delete(bucketName, key);
				return true;
			} catch (QiniuException e) {
				throw new RuntimeException(e.getMessage());
			}
		}
	}

	public static FileInfo checkFile(String key) {
		FileInfo fileInfo = null;
		try {
			fileInfo = bucketManager.stat(bucketName, key);
		} catch (QiniuException ignored) {
		}
		return fileInfo;
	}

	public static String getUrl(String key){
		return auth.privateDownloadUrl(QNYUrl+"/"+key,(3600L * 24));
	}

}
  • 包括文件上传file(建议使用MultipartFile类  接收文件  可以使用MultipartFile把文件存在本地也可以直接转File  实测有效)成功后返回文件名
  • 获取文件url路径  getUrl() 把文件名传入 成功返回url外链接地址
  • 删除文件delet()  把文件名掺入  成功返回200状态码

上传文件保存本地

package com.lh.controller;

import com.lh.domain.WeighInfo;
import com.lh.mapper.WeighInfoMapper;
import com.lh.service.IHikVisionService;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.OSSManageUtil;
import lombok.val;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.io.*;
import java.util.List;

@RestController
@RequestMapping("/lh/test")
public class TController {
    @Resource
    public WeighInfoMapper weighInfoMapper;

    @Resource
    private IHikVisionService hikVisionService;

    @Anonymous
    @PostMapping("/pushFile")
    public AjaxResult pushFile(MultipartFile file)
    {
        return AjaxResult.success(OSSManageUtil.uploadFile(readFile(file)));
    }

    @Anonymous
    @GetMapping("/getUrl")
    public AjaxResult getUrl(String key)
    {
        return AjaxResult.success(OSSManageUtil.getUrl(key));
    }
    private File readFile(MultipartFile file){
        int n;
        File newFile = new File(file.getOriginalFilename());
        try (InputStream in = file.getInputStream(); OutputStream os = new FileOutputStream(newFile)) {
            byte[] buffer = new byte[4096];
            while ((n = in.read(buffer, 0, 4096)) != -1) {
                os.write(buffer, 0, n);
            }
            System.out.println("获取文件成功,暂存目录" + newFile.getAbsolutePath());
        } catch (IOException e) {
            System.out.println("获取文件失败");
        }
        return newFile;
    }


    @Anonymous
    @GetMapping("/deleteFile")
    public AjaxResult deleteFile(Long weightId)
    {
        WeighInfo weighInfo = new WeighInfo();
        weighInfo.setWeighId(weightId);
        weighInfo.setImgType(30);
        List<WeighInfo> weighInfoList = weighInfoMapper.selectWeighInfoList(weighInfo);
        for (WeighInfo info : weighInfoList) {
            OSSManageUtil.deleteFile(info.getPath());
        }
        return AjaxResult.success();
    }


}

七牛云上传文件图片,前端需给到二进制的字符流形式。 

七牛云配置

<!-- 七牛云 -->
<dependency>
    <groupId>com.qiniu</groupId>
    <artifactId>qiniu-java-sdk</artifactId>
    <version>[7.7.0, 7.10.99]</version>
</dependency>
<!-- 文件上传工具类 -->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
</dependency>

MultipartFile详解

MultipartFile的属性 file.getOriginalFilename()与file.getName()的区别 MultipartFile与File互转_五月天的尾巴的博客-CSDN博客

七牛云不存本地SDK

Springboot OSS 七牛云 上传、删除、访问图_七牛云oss_Dragon Wu的博客-CSDN博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值