OSS 上传的操作

OSS 上传的操作:

依赖包:
<!--     阿里云OSS   -->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.15.1</version>
        </dependency>
配置文件:
#阿里
aliyun.sms.accessKeyId=LTAI5tMxsuT67msinBp31254
aliyun.sms.accessKeySecret=zDJW1i4Rq3nbTKb31A8ycfrKM6b14
aliyun.sms.templateCode=SMS_464506225
#阿里OSS
aliyun.oss.bcketName=gulimall-vues
aliyun.oss.urlprefix=http://gulimall-vues.oss-cn-chengdu.aliyuncs.com/
aliyun.oss.endpoint=http://oss-cn-chengdu.aliyuncs.com
配置类:
package com.example.tanhuanapp.controller;

import com.aliyun.oss.OSSClient;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

/**
 * @author IT空门_门主
 * @date 2024/1/11
 */
@Configuration
@PropertySource("classpath:application.properties")
@Data
public class AliyunOssConfig {
    @Value("${aliyun.oss.endpoint}")
    private String endpoint;
    @Value("${aliyun.sms.accessKeyId}")
    private String accessKeyId;
    @Value("${aliyun.sms.accessKeySecret}")
    private String accessKeySecret;
    @Value("${aliyun.oss.bcketName}")
    private String bucketName;
    @Value("${aliyun.oss.urlprefix}")
    private String urlPrefix;

    /**
     * 将OSS注入容器
     * @return
     */
    @Bean
    public OSSClient ossClient(){
        return new OSSClient(endpoint,accessKeyId,accessKeySecret);
    }



}
实现类(仅供参考):
package com.example.tanhuanapp.server.impl;

import cn.hutool.core.date.DateTime;
import com.aliyun.oss.OSSClient;
import com.example.tanhuanapp.controller.AliyunOssConfig;
import com.example.tanhuanapp.pojo.vo.PicUploadResult;
import com.example.tanhuanapp.server.PicUploadServer;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.RandomUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.ByteArrayInputStream;
import java.io.IOException;
/**
 * @author IT空门_门主
 * @date 2024/1/11
 */

@Slf4j
@Service
public class PicUploadServerImpl  implements PicUploadServer {
    //允许上传的格式
    private static final String[] IMAGE_TYPE = new String[]{".jpg", ".jpeg", ".bmp", ".png", ".gif"};
    @Autowired
    private OSSClient ossClient;

    @Autowired
    private AliyunOssConfig aliyunOssConfig;


    /**
     * 上传图片
     * @param uploadFile
     * @return
     */
    @Override
    public PicUploadResult upload(MultipartFile uploadFile) {
        log.info("传入的路径:{}",uploadFile);
        PicUploadResult fileUploadResult = new PicUploadResult();
         //图片做校验,对后缀名进行校验
        boolean isLegal = false;
        for (String type: IMAGE_TYPE ){
            if(StringUtils.endsWithIgnoreCase(uploadFile.getOriginalFilename(),
                    type)){
                isLegal =true;
                break;
            }
        }
        //为 false校验失败
        if(!isLegal){
            fileUploadResult.setStatus("error");
            return fileUploadResult;
        }
        //文件新路径
        String filename = uploadFile.getOriginalFilename();
        log.info("文件名:{}",filename);
        String filePath =getFilePath(filename);
        log.info("文件路径:{}",filePath);
        //上传到阿里云
        try {
            ossClient.putObject(aliyunOssConfig.getBucketName(),filePath,new ByteArrayInputStream(uploadFile.getBytes()));
        } catch (IOException e) {
            e.printStackTrace();
            //上传失败
            fileUploadResult.setStatus("error");
            return  fileUploadResult;
        }
        //上传成功
        fileUploadResult.setStatus("done");
        fileUploadResult.setName(this.aliyunOssConfig.getUrlPrefix()+filePath);
        log.info("OSS文件路径:{}",this.aliyunOssConfig.getUrlPrefix()+filePath);
        fileUploadResult.setUid(String.valueOf(System.currentTimeMillis()));
        return fileUploadResult;
    }

    /**
     * 处理图片路径
     * @param filename
     * @return
     */
    private String getFilePath(String filename) {
        DateTime dateTime = new DateTime();
        //生成文件名
        return "images/"+ dateTime.toString("yyyy") + "/" + dateTime.toString("MM") + "/" + dateTime.toString("dd")
                +System.currentTimeMillis()+ RandomUtils.nextInt(100,9999)+"."+StringUtils.substringAfterLast(filename,".");


    }
}

测试结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/310104.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Java SSM框架实现音乐推荐网站项目【项目源码+论文说明】

基于java的SSM框架实现音乐推荐网站演示 摘要 中国风音乐推介网站近年来已成为风靡全球的新兴艺术形式。国内涌现出了大批优秀、有才华的爱好者和许多经久不衰的经典作品。中国风音乐推介网站的兴起打破了音乐界格局,也突破了原有分类唱法发展中的瓶颈,为声乐艺术的发展开辟了…

为啥领导都爱说“我只看结果”?

点击下方“JavaEdge”&#xff0c;选择“设为星标” 第一时间关注技术干货&#xff01; 免责声明~ 任何文章不要过度深思&#xff01; 万事万物都经不起审视&#xff0c;因为世上没有同样的成长环境&#xff0c;也没有同样的认知水平&#xff0c;更「没有适用于所有人的解决方案…

SpringCloud 之HttpClient、HttpURLConnection、OkHttpClient切换源码

承接上文&#xff0c;之前已经分析过OpenFegin 的创建、发送请求源码了&#xff0c;接下来&#xff0c;分析下底层的HttpClient、HttpURLConnection、OkHttpClient切换从源码级别来看是如何做到的。 Spring Cloud OpenFegin&#xff08;创建、发送请求&#xff09;源码 Http…

创建mysql普通用户

一、创建mysql普通用户的原因&#xff1a; 权限控制&#xff1a;MySQL的权限系统允许您为每个用户分配特定的权限。通过创建普通用户&#xff0c;您可以根据需要为每个用户分配特定的数据库和表权限&#xff0c;而不是将所有权限授予一个全局管理员用户。这有助于提高数据库的…

浮动和定位

目录​​​​​​​ &#x1f333;浮动 &#x1f340;去浮动 &#x1f343;方法一 &#x1f343;方法二 &#x1f343;方法三 &#x1f333;定位 &#x1f340;相对定位 &#x1f340;绝对定位 &#x1f340;固定定位 &#x1f333;转义字符 浮动 浮动会脱离文档流.导…

部署vue项目的常见问题汇总--许锅锅

文章目录 vue项目的常见问题版本问题/控制台指令识别问题【node和npm的版本要对应】加载慢的问题【设置镜像即可】设置淘宝镜像cmd窗口内容 npm/cnpm install的问题 npm WARN deprecated core-js3.6.5: core-js&#xff1c;3.23.3 is no longer maintained and not recommended…

计算机毕业设计------SSH宿舍管理系统

项目介绍 本项目分为三种角色&#xff1a;系统管理员、楼宇管理员、学生&#xff1b; 系统管理员主要功能如下&#xff1a; 楼宇管理员管理、学生管理、楼宇管理、宿舍管理、学生入住登记、学生寝室调换、学生迁出登记、学生缺勤记录、修改密码、退出登录 楼宇管理员主要功能…

新接入荣耀 SDK,混淆出包,登录提示框显示不全

荣耀联运客户端 SDK 刚出来不就&#xff0c;看文档第一个对外版本也就是 2023 年 8 月&#xff0c;所以最近开始接入&#xff0c;中间也遇到了一些麻烦折腾了不少时间。 什么意思呢 正常的登录提示 UI 是这样的&#xff0c;能够完整的显示 UI 部分&#xff08;此前是通过定制…

计算机毕业设计-----SSH校园精品课程网前后台

项目介绍 本项目是很不错的一个校园精品课程网源码&#xff0c;前台和后台源码都有&#xff0c;分为管理员与学生两种角色&#xff1b; 前台功能&#xff1a;网站首页&#xff0c;校园新闻&#xff0c;课程中心&#xff0c;资源下载&#xff0c;互动交流&#xff0c;个人中心…

借助GPT理解 “ Android中 点击弹框外部 取消弹框”

在平常的开发工作中 或 阅读技术博客/书籍 时&#xff0c;难免会遇到我们不懂的知识点&#xff0c;网络上搜索的资料 需要有准确性&#xff0c;系统性&#xff0c;可实操性。 这样的资料查询很费时间且还不一定能找到&#xff0c;但是如果借助训练过的的gpt&#xff0c;就会省下…

视频转gif的在线转换怎么操作?告别繁琐,轻松搞定

视频转gif的在线转换怎么操作&#xff1f;在当今社交媒体盛行的时代&#xff0c;GIF动图已经成为了我们表达自我、分享生活的重要方式。但是&#xff0c;很多小伙伴可能还在为如何将心爱的视频片段转为GIF而烦恼。今天&#xff0c;我们就来一起学习如何将视频轻松转换为GIF的在…

09-责任链模式-C语言实现

责任链模式&#xff1a;Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request.Chain the receiving objects and pass the request along the chain until an object handles it.&#xff08;使多个对象都有…

基于ssm文化遗产的保护与旅游开发论文

摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到了互联网时代才发现能补上自古…

适合游泳的骨传导耳机,推荐四款高质量游泳耳机!

游泳是一项全身性的运动&#xff0c;对于锻炼身体和塑形都很有帮助&#xff0c;但是游泳的时候往往会因为水的阻力而感到动作笨拙&#xff0c;同时也会感到枯燥无味。而一款好的游泳耳机则能够让你在游泳的过程中享受音乐或者其他的音频内容&#xff0c;增加游泳的趣味性&#…

chrony 时间同步

一.chrony简介 chrony 的优势&#xff1a; ① 更快的同步&#xff0c;从而最大程度减少了时间和频率误差&#xff0c;对于并非全天 24 小时运行的虚拟计算机而言非常有用。 相对于NTP来说&#xff0c;chrony性能更好 NTP是网络时间协议(Network Time Protocol)&#xff0c;它…

十大开放式耳机品牌哪个好?开放式耳机详细评测攻略分享,精华篇

相信很多朋友在选购开放式耳机的时候&#xff0c;发现市场上的开放式耳机品牌琳琅满目&#xff0c;完全不清楚哪家的产品更胜一筹&#xff0c;有些人甚至跟风购入&#xff0c;因此很容易买到不合适自己的而踩雷。 其实这种耳机我很早之前就有在使用&#xff0c;我对于耳机数码类…

Idea中web项目一些配置问题

1. 产生原因 我从github上clone项目下来后发现idea的一些配置没有带下来需要自己配, 这花了我很多时间, 所以这里总结一下。 2. 具体配置 首先是利用idea进行clone操作 将对应仓库的ssh链接拷贝到此处即可 完成后项目就被clone到了本地, 下面进入正式配置 首先选择所要使用…

查看navicat链接密码

导出链接,带密码导出 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/239bcf0ad22d4de98524fa4d7db4a30d.png 查看密码 这个是navicat加密后的密码&#xff0c;需要解密 使用一段代码解密 这个是php代码&#xff0c;没有本地php环境&#xff0c;可以看在线…

java项目之基于个人需求和地域特色的外卖推荐系统(ssm)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的闲一品交易平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 管理员&#xff1a;管理员…

超低温冰箱,还在人工监测?教你一招完成,超级简单!

随着科技的不断进步&#xff0c;超低温冰箱在医疗、科研、生物制药等领域的应用日益广泛。超低温环境对储存和保护生物样本、药品等具有特殊的要求&#xff0c;因此超低温冰箱监控系统变得至关重要。 客户案例 医疗实验室 河南某大型医疗实验室使用超低温冰箱存储各种生物样本…