SpringBoot学习——七牛云上传删除图片

导入依赖

        <!-- 七牛云 -->
        <dependency>
            <groupId>com.qiniu</groupId>
            <artifactId>qiniu-java-sdk</artifactId>
            <version>[7.5.0, 7.5.99]</version>
        </dependency>
        <!--Gosn依赖-->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.6</version>
        </dependency>

application.yml 配置

# 七牛云
oss:
  qiniu:
    domain: 填入你的访问域名 # 访问域名(默认使用七牛云测试域名)
    accessKey: 填入你的公钥 # 公钥
    secretKey: 填入你的私钥 # 私钥
    bucketName: 填入你的存储空间名  #存储空间名称

QiNiuYunConfig.java

@Configuration
public class QiNiuYunConfig {
    /**
     * 七牛域名domain
     */
    @Value("${oss.qiniu.domain}")
    private String qiniuDomain;
    /**
     * 七牛ACCESS_KEY
     */
    @Value("${oss.qiniu.accessKey}")
    private String qiniuAccessKey;
    /**
     * 七牛SECRET_KEY
     */
    @Value("${oss.qiniu.secretKey}")
    private String qiniuSecretKey;
    /**
     * 七牛空间名
     */
    @Value("${oss.qiniu.bucketName}")
    private String qiniuBucketName;

    protected static Logger logger = LoggerFactory.getLogger(QiNiuYunConfig.class);

    public String uploadPhoto(String filename, FileInputStream file) {
        // 构造一个带指定Region对象的配置类,注意后面的Region个地区不一样的
        Configuration cfg = new Configuration(Region.region2());
        cfg.useHttpsDomains = false;
        UploadManager uploadManager = new UploadManager(cfg);
        // 生成上传凭证,然后准备上传
        Auth auth = Auth.create(qiniuAccessKey, qiniuSecretKey);
        String upToken = auth.uploadToken(qiniuBucketName);
        try {
            Response response = uploadManager.put(file, filename, upToken, null, null);
            // 解析上传成功的结果
            DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
            // 这个returnPath是获得到的外链地址,通过这个地址可以直接打开图片
            return "http://"+qiniuDomain+"/"+putRet.key;
        } catch (QiniuException ex) {
            Response r = ex.response;
            logger.error(r.toString());
            System.err.println();
            try {
                logger.error(r.bodyString());
            } catch (QiniuException ex2) {
                r = ex2.response;
                logger.error(r.toString());
            }
        }
        return "";
    }

    public boolean deletePhoto(String fileName) {
        Configuration configuration = new Configuration(Region.region2());
        Auth auth = Auth.create(qiniuAccessKey, qiniuSecretKey);
        BucketManager bucketManager = new BucketManager(auth, configuration);
        try {
            if (fileName != null) {
                bucketManager.delete(qiniuBucketName, fileName);
                return true;
            }
        } catch (QiniuException ex) {
            //如果遇到异常,说明删除失败
            logger.error(String.valueOf(ex.code()));
            logger.error(ex.response.toString());
        }
        return false;
    }
}

使用案例:
七牛云返回的路径格式:
  http:// 访问域名 / 图片名称
注:
  这里的RespBean是自定义的响应类

    @Autowired
    protected static final Logger logger = LoggerFactory.getLogger(QrCodeController.class);
    private QiNiuYunConfig qiNiuYunConfig;
    @Autowired
    private IQrCodeService iQrCodeService;
    
	@PostMapping("qrCode/insert")
    @ApiOperation("上传二维码图片")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "photoName", value = "图片名称", dataTypeClass = String.class)
    })
    public RespBean insert(@RequestParam String photoName, @RequestPart("file") MultipartFile file) {
        QrCode qrCode = new QrCode();
        qrCode.setPhotoName(photoName);
        // 获取文件名
        //String fileName = file.getOriginalFilename();
        // 生成随机的图片名 (这个案例中没使用)
        //String photoName = UUID.randomUUID() + "-" +fileName;
        if (!file.isEmpty()) {
            try {
                FileInputStream inputStream = (FileInputStream) file.getInputStream();
                // 这里接收 七牛云返回的 图片地址
                String path = iQiNiuYunService.uploadPhoto(photoName, inputStream);
                qrCode.setPhotoAddress(path);
                // 将二维码实体qrcode 插入到mysql数据库中
                if (iQrCodeService.insert(qrCode)) {
                    logger.info("上传成功!");
                    return RespBean.ok("上传成功!");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return RespBean.error("上传失败!");
    }
    
    @DeleteMapping("qrCode/delete")
    @ApiOperation("根据照片名删除图片")
    @ApiImplicitParam(name = "photoName", value = "图片名称",dataTypeClass = String.class)
    public RespBean delete(@RequestParam String photoName){
        if (iQiNiuYunService.deletePhoto(photoName)&&iQrCodeService.delete(photoName)){
            return RespBean.ok("删除成功");
        }
        return RespBean.ok("删除失败,未找到该图片!");
    }

相关说明:
关于 Region 对象和机房的关系如下:
机房    Region
华东    Region.region0() , Region.huadong()
华北    Region.region1() , Region.huabei()
华南    Region.region2() , Region.huanan()
北美    Region.regionNa0() , Region.beimei()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现Spring Boot整合七牛云上传文件,可以按照以下步骤进行: 1.引入七牛云Java SDK 在pom.xml中引入七牛云Java SDK: ```xml <dependency> <groupId>com.qiniu</groupId> <artifactId>qiniu-java-sdk</artifactId> <version>[7.2.0,)</version> </dependency> ``` 2.配置七牛云参数 在application.yml或application.properties中添加七牛云的参数: ```yml qiniu: accessKey: your_access_key secretKey: your_secret_key bucket: your_bucket_name domain: your_domain_name ``` 3.编写上传文件的代码 在需要上传文件的地方编写上传文件的代码,示例代码如下: ```java @Service public class QiniuService { @Autowired private QiniuConfig qiniuConfig; /** * 上传文件到七牛云 * * @param file 文件对象 * @return 文件访问URL */ public String uploadFile(File file) throws QiniuException { // 构造一个带指定Zone对象的配置类 Configuration cfg = new Configuration(Zone.autoZone()); // ...其他参数参考类注释 UploadManager uploadManager = new UploadManager(cfg); // 生成上传凭证,然后准备上传 String accessKey = qiniuConfig.getAccessKey(); String secretKey = qiniuConfig.getSecretKey(); String bucket = qiniuConfig.getBucket(); // 如果是Windows情况下,格式是 D:\\qiniu\\test.png String localFilePath = file.getAbsolutePath(); // 默认不指定key的情况下,以文件内容的hash值作为文件名 String key = null; Auth auth = Auth.create(accessKey, secretKey); String upToken = auth.uploadToken(bucket); try { Response response = uploadManager.put(localFilePath, key, upToken); // 解析上传成功的结果 DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class); return qiniuConfig.getDomain() + "/" + putRet.key; } catch (QiniuException ex) { Response r = ex.response; System.err.println(r.toString()); try { System.err.println(r.bodyString()); } catch (QiniuException ex2) { // ignore } throw ex; } } } ``` 4.测试上传文件 在测试类中编写测试上传文件的代码,示例代码如下: ```java @RunWith(SpringRunner.class) @SpringBootTest public class QiniuServiceTest { @Autowired private QiniuService qiniuService; @Test public void testUploadFile() throws QiniuException { File file = new File("test.png"); String url = qiniuService.uploadFile(file); System.out.println(url); } } ``` 其中,test.png是要上传的文件名。运行测试类即可上传文件到七牛云,并返回文件的访问URL。 以上就是Spring Boot整合七牛云上传文件的全部步骤。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值