首页 > 其他分享 >Springboot 阿里云OSS对象存储

Springboot 阿里云OSS对象存储

时间:2024-10-09 23:20:38浏览次数:13  
标签:存储 String OSS private Result import com public Springboot

        Springboot 阿里云OSS对象存储

        OSSController

package com.wzb.OSSController20241009;


import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import com.wzb.pojo20241009.Result;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

@RestController
public class OSSController {

    @PostMapping("/OSSUpload")
    public Result upload(String username, Integer age, MultipartFile image) throws IOException {
        // 获取原文件名
        String originalFileName = image.getOriginalFilename();
        // 获取原文件的扩展名
        String externalFileName = ".txt";
        if (originalFileName != null) {
            // 从最后一个.开始进行字符串切割,就可以成功得到原文件的扩展名
            externalFileName = originalFileName.substring(originalFileName.lastIndexOf("."));
        }
        // 使用UUID给文件重命名
        String newFileName = UUID.randomUUID().toString() + externalFileName;
        // 先保存到本地
        String filePath = "E:/images/" + newFileName;
        image.transferTo(new File(filePath));

        // 准备阿里云
        // 声明bucket的Endpoint
        String endpoint = "https://oss-cn-chengdu.aliyun.com";
        // 声明阿里云账号
        String accessKeyId = "LTAI5tKr5ZzpE1BRJ4yHGEVQ";
        String accessKeySecret = "DqZAfe3cXfX79J72RmcszqEX0wG3D5";
        // 声明bucket的名称
        String bucketName = "wzb-study";
        // 创建ossClient对象
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 创建ossClient的方法:OssClientBuilder中的build方法,需要传递endpoint、accessKeyId和accessKeySecret才可以成功创建

        // 准备上传
        try {
            // 开启文件输入流
            InputStream inputStream = new FileInputStream(filePath);
            // 创建PutObjectRequest对象
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, newFileName, inputStream);
            // 这是一个上传对象的请求类,需要传递保存至哪个bucket的bucketName,需要上传的文件的文件名,文件输入流

            // 可以返回response,若不设置,则返回的response为null
            putObjectRequest.setProcess("true");
            // 创建PutObject请求 >> 这步就是上传了
            PutObjectResult result = ossClient.putObject(putObjectRequest);
            // 上传成功后的返回值
            System.out.println(result.getResponse().getStatusCode());
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }

        // 响应
        return Result.success();
    }
}

        EmpService

package com.wzb.service20241009;

import com.wzb.mapper20241009.EmpMapper;
import com.wzb.pojo20241009.Emp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;

@Service
public class EmpServiceImplement implements EmpService{
    @Autowired
    private EmpMapper empMapper;

    @Override
    public Emp selectEmp(Integer id) {
        return empMapper.selectEmp(id);
    }

    @Override
    public void update(Emp emp) {
        // 为emp补全信息————将员工的修改时间更新为当前的时间
        emp.setUpdateTime(LocalDateTime.now());
        // 调用Mapper层的方法操作数据库完成更新
        empMapper.updateEmp(emp);

    }
}

         EmpMapper

package com.wzb.mapper20241009;

import com.wzb.pojo20241009.Emp;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

@Mapper
public interface EmpMapper {

    @Select("select * from emp where id = #{id}")
    public Emp selectEmp(Integer id);

    // 因为更新员工数据的SQL语句相对比较复杂,所以说需要使用xml动态SQL
    public void updateEmp(Emp emp);
}

        Emp类

package com.wzb.pojo20241009;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDate;
import java.time.LocalDateTime;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Emp {
    private Integer id;
    private String username;
    private String password;
    private String name;
    private Short gender;
    private String image;
    private Short job;
    private LocalDate entrydate;
    private Integer deptId;
    private LocalDateTime createTime;
    private LocalDateTime updateTime;
}

        响应结果Result

package com.wzb.pojo20241009;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {
    private Integer code; // 响应码,1是响应成功,2是响应失败
    private String message; // 响应信息,描述响应结果的字符串
    private Object data; // 响应返回的数据

    // 响应成功,但不返回数据的方法
    public static Result success() {
        return new Result(1, "success", null);
    }
    // 响应成功,并且返回数据的方法
    public static Result success(Object data) {
        return new Result(1,"success", data);
    }
    // 响应失败的方法
    public static Result fail(String message) {
        return new Result(0, message, null);
    }
}

         

 

 

 

标签:存储,String,OSS,private,Result,import,com,public,Springboot
From: https://blog.csdn.net/Aishangyuwen/article/details/142798987

相关文章

  • 黑马毕设分享《基于springboot招生管理系统》(源码+lw+部署文档+讲解等)
    文章目录1.前言黑马设计——专注大学生的项目实战开发,免费讲解,毕业答疑辅导黑马设计工作室简介:黑马设计是一家专注大学生的项目实战开发,免费讲解,毕业答疑辅导的工作室✅,创始人是硕士毕业于华南理工大学,工科专业,目前团队成员全职+兼职上百余人,运营线上店铺2家,与B站(IT实战,黑......
  • 黑马毕设分享《基于springboot学生综合测评系统》(源码+lw+部署文档+讲解等)
     文章目录1.前言黑马设计——专注大学生的项目实战开发,免费讲解,毕业答疑辅导黑马设计工作室简介:黑马设计是一家专注大学生的项目实战开发,免费讲解,毕业答疑辅导的工作室✅,创始人是硕士毕业于华南理工大学,工科专业,目前团队成员全职+兼职上百余人,运营线上店铺2家,与B站(IT实战......
  • [SpringBoot] 苍穹外卖--面试题总结--上
    前言     1--苍穹外卖-SpringBoot项目介绍及环境搭建详解-CSDN博客2--苍穹外卖-SpringBoot项目中员工管理详解(一)-CSDN博客3--苍穹外卖-SpringBoot项目中员工管理详解(二)-CSDN博客4--苍穹外码-SpringBoot项目中分类管理详解-CSDN博客5--苍穹外卖-SpringBoot项目......
  • 微信小程序springboot+uniapp 配镜帮 眼镜商城平台
    目录技术介绍具体实现截图毕设制作流程HBuilderXmysql数据库与主流编程语言java类核心代码部分展示登录的业务流程的顺序是:系统性能系统测试详细视频演示源码获取技术介绍开发的过程亦是一个高效的学习过程,让我认识到系统开发是一个需要很多不同工具共同完成的大流......
  • 基于springboot的网上选课管理系统(含源码+sql+视频导入教程+文档+PPT)
    ......
  • 基于springboot的设备档案管理系统(含源码+sql+视频导入教程+文档+PPT)
    ......
  • SpringBootWeb AOP
    SpringBootWebAOP事务管理rollbackFor属性propagation属性 案例AOP基础 进阶通知类型通知顺序 切入点表达式execution@annotation连接点案例实体类接口方法切面类事务管理rollbackFor属性propagation属性REQUIRED:大部分情况下都是用该传播行......
  • [20241009]oracle timestamp with time zone数据类型的存储.txt
    [20241009]oracletimestampwithtimezone数据类型的存储.txt--//放假前遇到的问题,开发在表中定义了几个timestampwithtimezone的数据类型,及时更正对方的错误,完全没有使用这样的数据--//类型。类似的问题我以前就遇到,比如全部应用程序的表凡是varchar2数据类型都被定义为nvar......
  • MySql数据库---存储过程
    存储过程概念MySQL5.0版本开始支持存储过程。简单的说,存储过程就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法,类似Python中的函数;存储过就是数据库SQL语言层面的代码封装与重用入门案例语法:delimiter自定义结束符号createpro......
  • 【MySQL】视图、存储过程、触发器
    目录一、视图1.创建视图2.视图的使用3.查看视图4.删除视图5. 视图的作用二、存储过程 1.存储过程的创建2.使用存储过程3.带参数的存储过程3.1 分页4.存储过程与函数的区别5.存储过程的缺陷三、触发器 --隐式执行1.创建触发器2.查看库中所有......