快捷餐饮之店家后台OSS文件管理实现

  • j3_liuliang
  • 快捷点餐的第一步功能实现,就是文件上传功能,做好这个店家后台的相关功能就可以连贯!

项目相关文章导航:

  1. 快捷点餐项目简介
  2. 餐饮系统设计概括
  3. 餐饮系统店家后端基础功能构建
  4. 快捷餐饮之店家后台OSS文件管理实现
  5. 快捷餐饮之店家后台厨艺秀实现
  6. 快捷餐饮之店家后台菜品分类及菜品管理实现
  7. 快捷餐饮之店家后台评论管理及餐桌管理实现
  8. 下期实现订单相关功能

项目Git地址: 点这里哦!

一、关于阿里云对象存储OSS

阿里云对象存储OSS(Object Storage Service)是阿里云提供的海量、安全、低成本、高持久的云存储服务。其数据设计持久性不低于99.9999999999%(12个9),服务可用性(或业务连续性)不低于99.995%。

OSS具有与平台无关的RESTful API接口,您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。

您可以使用阿里云提供的API、SDK接口或者OSS迁移工具轻松地将海量数据移入或移出阿里云OSS。数据存储到阿里云OSS以后,您可以选择标准存储(Standard)作为移动应用、大型网站、图片分享或热点音视频的主要存储方式,也可以选择成本更低、存储期限更长的低频访问存储(Infrequent Access)、归档存储(Archive)、冷归档存储(Cold Archive)作为不经常访问数据的存储方式。

二,快速入门

访问链接:点击这里哦!

三,图形化使用OSS

登入你的阿里云,并开通OSS存储服务

3.1 进入你的OSS

在这里插入图片描述

3.2 点击Bucket列表

在这里插入图片描述

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

3.3 创建成功

在这里插入图片描述

3.4 上传文件

在这里插入图片描述

在这里插入图片描述

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

四、使用RAM子用户代码访问

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

每个人的都不一样


用户登录名称 quick-dine-oss-files@1036300182841973.onaliyun.com
AccessKey ID LTAI4GDe9cNNSW1CyzSaDKEr
AccessKey Secret FNnU1YTfzaE72CFTTwBK7bcwrHl84U

五、OSS文件管理实现

这里先不做服务拆分,因为先实现功能后做项目优化,而且我这是一个小的课设,能省那些高大上的东西就省略掉,但功能实现绝对是不会次的

5.1 配置文件自定义属性值

每个人的值都不一样,按对呀的名称填入哦!

aliyun:
  oss:
    endpoint: oss-cn-beijing.aliyuncs.com
    keyid: LTAI4GFkxZbNBJS98q8AoLyC
    keysecret: RPPjRwQ42KlpGpsGHHf8EYMVnl6t2R
    #bucket可以在控制台创建,也可以使用java代码创建,注意先测试bucket是否已被占用
    bucketname: quick-dine-oss-file

创建对应的属性类,进行映射

类名:OssProperties

/**
 * @Package: cn.liuliang.quickdinesysstore.utils
 * @Author: liuliang
 * @CreateTime: 2020/10/26 - 9:09
 * @Description:
 */
@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class OssProperties {
    private String endpoint;
    private String keyid;
    private String keysecret;
    private String bucketname;
}

在这里插入图片描述

5.2 创建控制器

名称:OSSFileController

/**
 * @Package: cn.liuliang.quickdinesysstore.controller
 * @Author: liuliang
 * @CreateTime: 2020/10/26 - 9:11
 * @Description:
 */
@Api(value = "OSS文件上传管理", tags = "OSS文件上传管理")
@RestController
@RequestMapping("/oss/file")
public class OSSFileController {

    @Autowired
    private OSSFileService ossFileService;


    @ApiOperation("文件上传")
    @PostMapping("/upload")
    public ResultDTO upload(
        @ApiParam(value = "文件对象", required = true) @RequestParam("file") MultipartFile file,
        @ApiParam(value = "文件上传的模块名称(目录名称)", required = true) @RequestParam("module") String module) {
        String uploadUrl = "";
        InputStream inputStream = null;
        try {
            inputStream = file.getInputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        uploadUrl = ossFileService.upload(inputStream, module, file.getOriginalFilename());
        return ResultDTO.success().message("上传成功!").data("url", uploadUrl);
    }

    @ApiOperation("文件删除")
    @GetMapping("/remove")
    public ResultDTO removeFile(
        @ApiParam(value = "要删除的文件路径", required = true) @RequestParam String url) {
        ossFileService.removeFile(url);
        return ResultDTO.success().message("文件刪除成功");
    }


}

5.3 创建业务层

类名:OSSFileService,OSSFileServiceImpl

/**
 * @Package: cn.liuliang.quickdinesysstore.service
 * @Author: liuliang
 * @CreateTime: 2020/10/26 - 9:27
 * @Description: 文件上传业务接口
 */
public interface OSSFileService {
    /**
     * 文件上传
     * @param inputStream       文件输入流
     * @param module            文件要存储的目录名称
     * @param originalFilename  文件名称
     * @return
     */
    String upload(InputStream inputStream, String module, String originalFilename);

    /**
     * 文件删除
     * @param url   要删除的文件访问地址
     */
    void removeFile(String url);
}
/**
 * @Package: cn.liuliang.quickdinesysstore.service.impl
 * @Author: liuliang
 * @CreateTime: 2020/10/26 - 9:28
 * @Description: 文件上传业务接口实现类
 */
@Service
public class OSSFileServiceImpl implements OSSFileService {

    @Autowired
    private OssProperties ossProperties;

    @Override
    public String upload(InputStream inputStream, String module, String originalFilename) {
        //获取oss服务器相关属性值
        String endpoint = ossProperties.getEndpoint();
        String keyid = ossProperties.getKeyid();
        String keysecret = ossProperties.getKeysecret();
        String bucketname = ossProperties.getBucketname();
        //判断oss实例是否存在:如果不存在则创建,如果存在则获取
        OSS ossClient = new OSSClientBuilder().build(endpoint, keyid, keysecret);
        if (!ossClient.doesBucketExist(bucketname)) {
            //创建bucket
            ossClient.createBucket(bucketname);
            //设置oss实例的访问权限:公共读
            ossClient.setBucketAcl(bucketname, CannedAccessControlList.PublicRead);
        }
        //构建文件路径
        //构建日期路径:avatar/2019/02/26/文件名
        String folder = new DateTime().toString("yyyy/MM/dd");
        //文件名:uuid.扩展名
        String fileName = UUID.randomUUID().toString();
        String fileExtension = originalFilename.substring(originalFilename.lastIndexOf("."));
        String key = module + "/" + folder + "/" + fileName + fileExtension;
        //文件上传至阿里云
        ossClient.putObject(bucketname, key, inputStream);
        // 关闭OSSClient。
        ossClient.shutdown();
        //返回url地址
        return "https://" + bucketname + "." + endpoint + "/" + key;
    }

    @Override
    public void removeFile(String url) {

        //获取oss服务器相关属性值
        String endpoint = ossProperties.getEndpoint();
        String keyid = ossProperties.getKeyid();
        String keysecret = ossProperties.getKeysecret();
        String bucketname = ossProperties.getBucketname();
        //创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, keyid, keysecret);

        String host = "https://" + bucketname + "." + endpoint + "/";
        String objectName = url.substring(host.length());

        // 删除文件。
        ossClient.deleteObject(bucketname, objectName);


        // 关闭OSSClient。
        ossClient.shutdown();
    }
}

5.4 包结构

在这里插入图片描述

5.5 测试

5.5.1 上传

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

登录阿里云看看效果:

在这里插入图片描述

5.5.2 删除

在这里插入图片描述

在这里插入图片描述

登录阿里云看看效果:

在这里插入图片描述

结束语

  • 由于博主才疏学浅,难免会有纰漏,假如你发现了错误或偏见的地方,还望留言给我指出来,我会对其加以修正。
  • 如果你觉得文章还不错,你的转发、分享、点赞、留言就是对我最大的鼓励。
  • 感谢您的阅读,十分欢迎并感谢您的关注。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

J3code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值