SpringBoot实现文件上传②

前言:为什么要使用云存储?

在之前篇章我们已经实现在本机上传与获取文件,但是我们的应用服务器带宽是有限的,如果将这些资源都存储在应用服务器上会造成网络拥堵,一旦服务挂掉这些资源全无法访问。自己搭建文件存储服务器呢成本非常高,所以采用第三方oss服务来存储我们的文件资源。这篇文章将会从0基础介绍使用阿里云oss存储与七牛云存储。

阿里云oss VS 七牛云存储

阿里云:阿里云有一套完整的体系,服务器、云存储、CDN,阿里云都有对应的套餐供你使用,但是需要收费,而且CDN与oss分开收费…

七牛云:七牛有10G的永久免费存储空间,每月10GB下载流量,对用新用户来说十分的友好。

一、对接阿里云OSS

阿里云的oss的上传与存储文件是免费的,但是使用是收费的。

01、开通oss存储服务

注册阿里云账号,控制台搜索oss然后开通服务 地址:阿里云oss服务开通,进入控制台会看到这样的面板
在这里插入图片描述

02、创建Bucket 文件存储桶

在这里插入图片描述
创建Bucket
在这里插入图片描述
然后就创建成功
在这里插入图片描述

03、下载SDK

在这里插入图片描述
选择JAVA SDK 进入  参考网址: JAVA SDK安装
参考网址:快速入门 上传文件

04、导入SDK依赖

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.10.2</version>
</dependency>

05、相关参数获取

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

06、定义OssUploadService对接

package com.qd.service;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.CannedAccessControlList;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

/**
 * 阿里云文件存储
 *
 * @Author: qiandu
 * @Blog: https://www.cnblogs.com/qd666
 * @Date: 2021/11/22 22:44
 */
@Service
public class OssUploadService {

    /**
     * 阿里云oss文件上传
     *
     * @param multipartFile
     * @param dir
     * @return
     */
    public String uploadFile(MultipartFile multipartFile, String dir) {

        // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
        String endpoint = "Endpoint(地域节点)";
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        String accessKeyId = "accessKeyId";
        String accessKeySecret = "accessKeySecret";
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "bucketName";

        OSS ossClient = null;
        try {
            // 1:创建OSSClient实例。
            ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            if (!ossClient.doesBucketExist(bucketName)) {
                // 创建bucket
                ossClient.createBucket(bucketName);
                // 设置oss实例的访问权限:公共读
                ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
            }

            // 2:获取文件上传流
            InputStream inputStream = multipartFile.getInputStream();
            // 3:构建日期目录
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
            String datePath = dateFormat.format(new Date());
            // 4:获取文件名
            String originalFilename = multipartFile.getOriginalFilename();
            // 5:修改文件名
            String fileName = UUID.randomUUID().toString();
            // 6:取出后缀名
            String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
            // 7:最终文件名
            String newFileName = fileName + suffix;
            // 8:拼接文件路径与文件名
            String fileUrl = dir + "/" + datePath + "/" + newFileName;
            // 9:文件上传到阿里云服务器
            ossClient.putObject(bucketName, fileUrl, inputStream);
            // 10:返回最终路径
            return "https://" + bucketName + "." + endpoint + "/" + fileUrl;
        } catch (Exception e) {
            e.printStackTrace();
            return "fail";
        } finally {
            // 关闭OSSClient。
            ossClient.shutdown();
        }
    }
}

测试结果
在这里插入图片描述


二、对接七牛云存储

官网:https://www.qiniu.com/

通过七牛云官网介绍我们可以知道其提供了多种服务,我们主要使用的是七牛云提供的对象存储服务来存储图片。

01、开通对象存储

需要先注册才能使用七牛云的服务,注意:登录成功后还需要进行实名认证才能进行相关操作。
在这里插入图片描述

02、新建空间

在这里插入图片描述

03、查看文档对接

七牛云服务文档中心 服务中心
对象存储:对象存储文档
快速入门:快速入门

04、导入七牛SDK依赖

	<!--七牛存储SDK依赖-->
	<dependency>
	    <groupId>com.qiniu</groupId>
	    <artifactId>qiniu-java-sdk</artifactId>
	    <version>7.7.0</version>
	</dependency>

05、相关参数获取

获取secretKey与accessKey
在这里插入图片描述
在这里插入图片描述
bucket为空间存储命名

06、定义QiNiuUploadService对接

package com.qd.service;

import com.google.gson.Gson;
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.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;

import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;
import java.util.UUID;

/**
 * 七牛云存储
 *
 * @Author: qiandu
 * @Blog: https://www.cnblogs.com/qd666
 * @Date: 2021/11/23 1:12
 */
@Service
public class QiNiuUploadService {

    /**
     * 七牛云文件上传
     *
     * @param multipartFile
     * @return
     */
    public String uploadFile(MultipartFile multipartFile) {

        // 构造一个带指定 Region 对象的配置类
        Configuration cfg = new Configuration(Region.region0());
        UploadManager uploadManager = new UploadManager(cfg);
        // 填充凭证
        String accessKey = "your access key";
        String secretKey = "your secret key";
        String bucket = "your bucket name";

        try {
            // 1:得到inputStream
            InputStream inputStream = multipartFile.getInputStream();
            // 2:得到上传文件的名称
            String originalFilename = multipartFile.getOriginalFilename();
            // 3:重命名文件
            String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
            String newFileName = UUID.randomUUID().toString() + suffix;
            // 4:开始鉴权
            Auth auth = Auth.create(accessKey, secretKey);
            String upToken = auth.uploadToken(bucket);
            // 5:上传文件
            Response response = uploadManager.put(inputStream, newFileName, upToken, null, null);
            // 6:解析上传成功的结果
            DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
            // 7:返回url
            return "http://r2zfdptaq.hd-bkt.clouddn.com/" + putRet.key;
        } catch (Exception ex) {
            return "fail";
        }
    }

    /**
     * 删除上传的文件
     *
     * @param fileName
     */
    public static String deleteFile(String fileName) {
        // 填充凭证
        String accessKey = "your access key";
        String secretKey = "your secret key";
        String bucket = "your bucket name";
        // 构造一个带指定Zone对象的配置类
        Configuration cfg = new Configuration(Zone.zone0());
        String key = fileName;
        Auth auth = Auth.create(accessKey, secretKey);
        BucketManager bucketManager = new BucketManager(auth, cfg);
        try {
            bucketManager.delete(bucket, key);
            return "success";
        } catch (QiniuException ex) {
            return "fail";
        }
    }
}

测试结果
在这里插入图片描述
ok~完结 这些代码可以再次封装成工具类的,这里不再展示。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值