2024年Java最全Java实现阿里云OSS上传文件,高并发下Java程序的GC问题排查

最后

笔者已经把面试题和答案整理成了面试专题文档

image

image

image

image

image

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取


//DataSourceAutoConfiguration 由于此模块使用阿里云OSS存储文件,不需要访问数据库

//把数据源自动配置类去掉即可!防止报错!

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

@ComponentScan(basePackages = {"com.pdx"})

public class OssApplication {



    public static void main(String[] args) {

        SpringApplication.run(OssApplication.class,args);

    }

}



第四步:创建所需工具类


//当项目已启动,Spring接口,spring加载之后,执行接口中的一个方法

@Component

public class ConstantPropertiesUtils implements InitializingBean {



    //读取配置文件内容



    @Value("${aliyun.oss.file.endpoint}")

    private String endpoint;



    @Value("${aliyun.oss.file.keyid}")

    private String keyId;



    @Value("${aliyun.oss.file.keysecret}")

    private String keySecret;



    @Value("${aliyun.oss.file.bucketname}")

    private String bucketName;



    //定义公开的静态的常量

    public static String END_POINT;

    public static String ACCESS_KEY_ID;

    public static String ACCESS_KEY_SECRET;

    public static String BUCKET_NAME;



    @Override

    public void afterPropertiesSet() throws Exception {

        END_POINT = endpoint;

        ACCESS_KEY_ID = keyId;

        ACCESS_KEY_SECRET = keySecret;

        BUCKET_NAME = bucketName;

    }

}



第五步:编写逻辑代码实现相关功能

  • 前端控制层(Controller)

@RestController

@RequestMapping("/eduoss/fileoss")

@CrossOrigin //解决跨域问题

public class OssController {



    @Autowired

    private OssService ossService;



    //上传头像的方法

    @PostMapping

    public R uploadOssFile(MultipartFile file){



        //获取上传的文件,MultipartFile

        //返回上传到oss的路径,最后把路径上传到数据库对应字段

        String url =  ossService.uploadFileAvatar(file);

        return R.ok().data("url",url);

    }

}



  • 业务层(Service | ServiceImpl)

public interface OssService {



    //上传文件到OSS

    String uploadFileAvatar(MultipartFile file);



}



@Service

public class OssServiceImpl implements OssService {



    //上传文件到OSS

    @Override

    public String uploadFileAvatar(MultipartFile file) {



        //通过工具类来获取相应的值

        String endpoint = ConstantPropertiesUtils.END_POINT;

        String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;

        String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;

        String bucketName = ConstantPropertiesUtils.BUCKET_NAME;



       try{



           // 创建OSSClient实例。

           OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);



           // 获取上传文件的输入流

           InputStream inputStream = file.getInputStream();



           //获取文件名称

           String filename = file.getOriginalFilename();



           //调用OSS方法实现上传

           //第一个参数 Bucket名称

           //第二个参数  上传到OSS文件路径和文件名称

           //第三个参数  上传文件输入流

           ossClient.putObject(bucketName, filename, inputStream);



           // 关闭OSSClient。

           ossClient.shutdown();



            //把上传之后文件路径返回

           //需要把上传到阿里云oss路径手动拼接出来

           String url = "https://"+bucketName+"."+endpoint+"/"+filename;

           return url;

       }catch (Exception e){

           e.printStackTrace();

           return null;

       }

    }

}



第六步:修改文件覆盖问题

由于阿里云OSS上传文件的文件名相同时,最后一次会对上一次的文件进行覆盖


@Service

public class OssServiceImpl implements OssService {



    //上传文件到OSS

    @Override



### 最后

![](https://img-blog.csdnimg.cn/img_convert/cdf0e75c7d74841e0d9b1a9d60119ad7.webp?x-oss-process=image/format,png)

![](https://img-blog.csdnimg.cn/img_convert/266d240155d183031bd4a72b6d65e1c5.webp?x-oss-process=image/format,png)

![](https://img-blog.csdnimg.cn/img_convert/2988b6c2b42379b0e5484534457fddb5.webp?x-oss-process=image/format,png)

![](https://img-blog.csdnimg.cn/img_convert/3944f631bcc0e49d9216dde5c9ffbfef.webp?x-oss-process=image/format,png)

![](https://img-blog.csdnimg.cn/img_convert/520b9896148ebcbb940abbc95ab94353.webp?x-oss-process=image/format,png)

![](https://img-blog.csdnimg.cn/img_convert/200be8a44be879b538bcca7dd55d9044.webp?x-oss-process=image/format,png)


由于篇幅原因,就不多做展示了


> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/topics/618154847)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618154847)**

4)]

[外链图片转存中...(img-XZvrj3YV-1714859562504)]

[外链图片转存中...(img-wRJDNbo4-1714859562505)]

[外链图片转存中...(img-1L3Us4q4-1714859562505)]


由于篇幅原因,就不多做展示了


> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/topics/618154847)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618154847)**

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值