Spring mvc+oss存储+fileupload多文件上传实现SSO单点登录模板管理

之前给大家介绍了sso的相关知识点和集成方案,考虑到每个系统所属行业的不同,这边针对于不同行业做了一些统一的sso单点登录界面模板,使用fileupload多文件上传+OSS阿里云存储方案。

  1. 阿里云oss存储Utils

Java代码

public class AliyunUtils {  
      
```java
    private static AliyunUtils aliyun;  
    private AliyunUtils() {  
          
    }  
  
    public static synchronized AliyunUtils getInstance(){  
        if(aliyun==null){  
            aliyun=new AliyunUtils();  
        }  
        return aliyun;  
    }  
      
    /** 
     * 上传byte数组 
     * @param fileByte 
     * @param fileKey  
     */  
    public void uploadByte(byte[] fileByte, String fileKey){  
        // 创建OSSClient实例  
        OSSClient ossClient = new OSSClient(CloudConstant.ENDPOINT, CloudConstant.ACCESSKEYID, CloudConstant.ACCESSKEYSECRET);  
        // 上传byte数组  
        ossClient.putObject(CloudConstant.BUCKET, fileKey, new ByteArrayInputStream(fileByte));  
        // 关闭client  
        ossClient.shutdown();  
    }  
      
    /** 
     * 上传文件流 
     * @param inputStream 
     * @param fileKey 
     */  
    public void uploadInputStream(InputStream inputStream, String fileKey){  
        // 创建OSSClient实例  
        OSSClient ossClient = new OSSClient(CloudConstant.ENDPOINT, CloudConstant.ACCESSKEYID, CloudConstant.ACCESSKEYSECRET);  
        // 上传文件流  
        ossClient.putObject(CloudConstant.BUCKET, fileKey, inputStream);  
        // 关闭client  
        ossClient.shutdown();  
    }  
      
    /** 
     * 删除文件 
     * @param fileKey 
     */  
    public void deleteFile(String fileKey){  
        // 创建OSSClient实例  
        OSSClient ossClient = new OSSClient(CloudConstant.ENDPOINT, CloudConstant.ACCESSKEYID, CloudConstant.ACCESSKEYSECRET);  
        // 删除文件  
        ossClient.deleteObject(CloudConstant.BUCKET, fileKey);  
        // 关闭client  
        ossClient.shutdown();  
    }  
      
    //base64字符串转化成图片    
    @SuppressWarnings("restriction")  
    public static byte[] BASE64DecoderStringToByte(String imgStr)    
    {   //对字节数组字符串进行Base64解码并生成图片    
        if (imgStr == null) //图像数据为空    
            return null;    
        sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();    
        try {    
            //Base64解码    
            byte[] b = decoder.decodeBuffer(imgStr);    
           return b;  
        } catch (Exception e){    
            return null;    
        }    
    }  
      
    public static void main(String[] args) {  
        //AliyunUtils.getInstance().uploadByte(BASE64DecoderStringToByte(base64), "aabb.jpg");  
    }  
}  
  1. 阿里云配置常量类(可以配置到数据库或者properties,后面会更新配置方式)

Java代码

public class CloudConstant {  
      
    /****************阿里云OSS上传文件配置****************/  
    public static final String ENDPOINT = "http://oss-cn-shanghai.aliyuncs.com"; //外网访问域名  
    //public static final String ENDPOINT = "http://oss-cn-shanghai-internal.aliyuncs.com"; //内网访问域名  
    public static final String ACCESSKEYID = "12345678qwertyu; //标识用户  
    public static final String ACCESSKEYSECRET = "1234567890WERTYUIO"; //加密签名字符  
    public static final String BUCKET = "huiyi-bucket"; //存储空间  
      
    /****************背景文件路径配置****************/  
    public static final String BACK_IMG_INFO_PATH = "sso/backageImg/";   
      
}  

 3. sso templateController类

Java代码 

```java
public String save(SsoTemplate ssoTemplate, Model model, RedirectAttributes redirectAttributes, @RequestParam(value = "file", required = false) MultipartFile file) {  
        if (!beanValidator(model, ssoTemplate)) {  
            return form(ssoTemplate, model);  
        }  
  
        String fileName = String.valueOf(new Date().getTime());  
        String staff = "";  
        String fileKey = "";  
        // 上传文件  
        if (file.getSize() != 0) {  
            staff = FilenameUtils.getExtension(file.getOriginalFilename());  
            fileKey = CloudConstant.BACK_IMG_INFO_PATH + fileName + "." + staff;  
            // 删除OSS文件  
            AliyunUtils.getInstance().deleteFile(fileKey);  
            // 上传文件至阿里云OSS  
            try {  
                AliyunUtils.getInstance().uploadInputStream(file.getInputStream(), fileKey);  
                ssoTemplate.setImg(fileKey);  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
          
        ssoTemplateService.save(ssoTemplate);  
        addMessage(redirectAttributes, "保存模板成功");  
        return "redirect:" + Global.getAdminPath() + "/sso/ssoTemplate";  
    }  
  1. 界面显示效果
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SpringBoot可以通过阿里云的OSS(Object Storage Service)实现文件上传,以下是实现步骤: 1. 引入阿里云OSS SDK依赖 在pom.xml中引入以下依赖: ```xml <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.10.2</version> </dependency> ``` 2. 配置OSS连接信息 在application.properties文件中配置OSS连接信息: ```properties oss.endpoint=your-endpoint oss.accessKeyId=your-access-key-id oss.accessKeySecret=your-access-key-secret oss.bucketName=your-bucket-name ``` 3. 创建OSS客户端 在配置类中创建OSS客户端: ```java @Configuration public class OSSConfiguration { @Value("${oss.endpoint}") private String endpoint; @Value("${oss.accessKeyId}") private String accessKeyId; @Value("${oss.accessKeySecret}") private String accessKeySecret; @Bean public OSSClient ossClient() { return new OSSClient(endpoint, accessKeyId, accessKeySecret); } } ``` 4. 实现上传接口 ```java @RestController public class UploadController { @Autowired private OSSClient ossClient; @Value("${oss.bucketName}") private String bucketName; @PostMapping("/upload") public String upload(@RequestParam("file") MultipartFile file) { String fileName = file.getOriginalFilename(); try { ossClient.putObject(bucketName, fileName, new ByteArrayInputStream(file.getBytes())); return "success"; } catch (IOException e) { e.printStackTrace(); } finally { ossClient.shutdown(); } return "fail"; } } ``` 以上就是通过阿里云OSS实现文件上传的步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

企业软件定制

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

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

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

打赏作者

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

抵扣说明:

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

余额充值