阿里云oss拷贝(包含移动的代码)文件并返回下载地址

oss拷贝文件官方地址:
https://help.aliyun.com/zh/oss/developer-reference/java-copy-objects?spm=a2c4g.11186623.0.0.16f76083xr3lKM
在这里插入图片描述

步骤1:oss的Maven依赖

		<!-- OSS -->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.12.0</version>
        </dependency>

步骤2:配置文件:application.yml

在这里插入图片描述

步骤3:配置文件对象-OSSProperties.java

package com.hcl.demo.configure.oss;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.auth.CredentialsProvider;
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class OSSProperties {

    private String fileUrlPrefix;
    private String bucketName;
    private String diskName;
    private String regionId;
    private String endpoint;
    private String accessKey;
    private String accessSecret;
    private String oss_path;

    @Bean
    public OSS ossClient(){
        CredentialsProvider credentialsProvider = new DefaultCredentialProvider(accessKey, accessSecret);
        return new OSSClientBuilder().build(endpoint, accessKey, accessSecret);
    }
}

步骤4:处理文件地址和文件名称,copyFile方法

public String copyFile(String fileUrl) {

        String reUrl = null;
        // 原文件路径加文件名称:例如:xxx/test/testfile.xlsx
        String sourceObjectName = null;
        try {
        	// 处理是图片还是文件,我们系统区分了文件和图片
            String url1 = "https://file.xxx.com/";
            String url2 = "https://pic.xxx.com/";
            if (fileUrl.contains(url1)) {
                sourceObjectName = fileUrl.substring(url1.length());
            }
            if (fileUrl.contains(url2)) {
                sourceObjectName = fileUrl.substring(url2.length());
            }
            int doIndex = fileUrl.lastIndexOf("/");
            // 文件名称带后缀 例如:testfile.xlsx
            String fileName = fileUrl.substring(doIndex + 1);
            reUrl = this.ossCopyFileToNewPath(sourceObjectName, fileName);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return reUrl;
    }

步骤5:执行拷贝操作,ossCopyFileToNewPath方法返回新地址

private String ossCopyFileToNewPath(String sourceObjectName, String fileName) {

        String sourceBucketName = ossProperties.getBucketName();
//        String sourceObjectName = "xxx/test/testfile.xlsx";
        String destinationBucketName = ossProperties.getBucketName();
        String destinationObjectName = "xxxa/copy/" + fileName;


        // 创建OSS连接
        OSS ossClient = new OSSClientBuilder().build(ossProperties.getEndpoint(), ossProperties.getAccessKey(), ossProperties.getAccessSecret());
        // 判断bucket(存储空间)是否存在
        boolean exist = ossClient.doesBucketExist(ossProperties.getBucketName());
        JSONObject json = new JSONObject();
        if (!exist) {
            json.put("result", "存储空间不存在");
        }
        try {
            ossClient.copyObject(sourceBucketName, sourceObjectName, destinationBucketName, destinationObjectName);
            // 如果是移动文件就可以执行下面步骤
            // ossClient.deleteObject(sourceBucketName, sourceObjectName);//比复制文件多了一步删除
        } catch (Exception e) {
            log.info("报错信息:" + e.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
        return ossProperties.getFileUrlPrefix() + destinationObjectName;
    }

参数说明:
在这里插入图片描述
断点查看
在这里插入图片描述
补充:移动文件操作,就是在上面拷贝文件后删除原路径的文件即可。

ossClient.copyObject(sourceBucketName, sourceObjectName, destinationBucketName, destinationObjectName);
// 如果是移动文件就可以执行下面步骤
ossClient.deleteObject(sourceBucketName, sourceObjectName);//比复制文件多了一步删除

在这里插入图片描述
注意:有些依赖没有的可以自行导入,例如lombok等

		<!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

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

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

相关文章

GIT如何重新生成ssh密钥过程

GIT如何重新生成ssh密钥过程 一、生成密钥前需要把之前的密钥删除吆 第一步&#xff1a;重新配置用户名和邮箱&#xff08; Git Bash 或命令窗口&#xff09; 1、配置用户命令&#xff1a;git config --global user.name “xxxxx” 2、配置邮箱命令&#xff1a;git config …

laravel5.8中实现验证码组件的安装和验证

本篇文章主要讲解使用laravel5.8自带的验证码库实现验证码验证的效果教程。通过本教程你可以快速接入到自己的项目中开发相应的验证功能。 作者&#xff1a;任聪聪 (rccblogs.com) 日期&#xff1a;2023年12月17日 实际效果 安装步骤 步骤一、输入命令 composer require mews…

来看看这个技术,这才是UPS监控的最好方式!

在现代社会中&#xff0c;信息技术的持续发展使得机房UPS监控变得至关重要。机房是企业信息系统的核心&#xff0c;UPS监控系统能够确保在电力故障或其他问题发生时&#xff0c;机房设备能够持续稳定运行&#xff0c;从而保障数据的安全性和可用性。 客户案例 金融机构 河北某…

物流标签,2028 年将以5.2%左右的复合年增长率增长

近年来&#xff0c;在供应链中对产品和货物的跟踪和识别需求不断增长的推动下&#xff0c;物流标签市场出现了显着增长。预计该市场将继续以稳定的速度增长&#xff0c;无论是在全球还是在中国市场。 全球市场分析&#xff1a;全球物流标签市场预计从 2021 年到 2028 年将以 5.…

Mac系统如何安装rosetta?

目录​​​​​​​ 什么是rosetta&#xff1f; 如何安装rosetta&#xff1f; 如何用rosetta打开指定应用&#xff1f; 什么是rosetta&#xff1f; Rosetta是苹果公司开发的一个程序&#xff0c;用于让建立在特定处理器架构之上的旧版软件在新的处理器架构上运行。这个功能…

搜维尔科技:经脉腧穴虚拟针灸VR虚拟教学平台AcuMap软件案例分享

北京中医药大学经脉腧穴VR虚拟教学平台案例 主要产品 HTCvive &#xff0c;AcuMap&#xff1b; 实施内容 一、项目说明 &#xff08;1&#xff09;穴位取穴与体表解剖标志关系&#xff1b;&#xff08;2&#xff09;穴下层次解剖及周围解剖结构展示&#xff1b; &#xf…

FileZilla的使用以及FileZilla的主动模式和被动模式(详细案例分析附思维导图)

目录 前言 一.FileZilla的简介 1.1 主要功能 二.FileZilla的使用&#xff08;案例&#xff09; 2.1 虚拟机里面安装 2.2 案例 三.FileZilla的主动模式和被动模式 3.1 主动模式&#xff08;Active Mode&#xff09; 3.2 被动模式&#xff08;Passive Mode&#xff09; …

postman入门使用

前言 对于postman的基础其实很容易上手实现&#xff0c;也有很多教程。 对于小编我来说&#xff0c;也基本可以实现开发任务。 但是今年我们的高级测试&#xff0c;搞了一下postman&#xff0c;省去很多工作&#xff0c;让我感觉很有必要学一下 这篇文章是在 高级测试工程师ht…

数据结构第0章 初识

名人说&#xff1a;莫听穿林打叶声&#xff0c;何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 本篇笔记整理&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 0、思维导图1、数据结构1&#xff09;数据结构是什么&am…

九州金榜|家庭教育高中孩子沟通小技巧,拉进亲子关系更融洽

高中是孩子由少年期逐步走向青少年也就是我们说的青春期。这个阶段孩子也是孩子压力最大的时候&#xff0c;不止是心理、生理方面&#xff0c;更是来自于学习压力&#xff0c;高中是孩子人生关键的三年&#xff0c;这三年决定孩子未来的出路。 高中是学业最为繁忙的阶段&#…

FinalShell连接虚拟机遇到的问题

在下载好VM后也安装好了虚拟机&#xff08;我这里使用Centos7.5&#xff09;&#xff0c;但是当使用FinalShell连接虚拟机的时候&#xff0c;一直提示连接超时。。。。 后来找了半天&#xff0c;发现是有次校园网和VM虚拟机冲突&#xff0c;就把虚拟机的网络连接给关了&#x…

Ubuntu安装和配置Nextcloud并结合内网穿透实现远程访问

文章目录 摘要1. 环境搭建2. 测试局域网访问3. 内网穿透3.1 ubuntu本地安装cpolar3.2 创建隧道3.3 测试公网访问 4 配置固定http公网地址4.1 保留一个二级子域名4.1 配置固定二级子域名4.3 测试访问公网固定二级子域名 摘要 Nextcloud,它是ownCloud的一个分支,是一个文件共享服…

深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第五节 引用类型复制问题及用克隆接口ICloneable修复

深入浅出图解C#堆与栈 C# Heaping VS Stacking 第五节 引用类型复制问题及用克隆接口ICloneable修复 [深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈](https://mp.csdn.net/mdeditor/101021023)[深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节…

JavaGUI+Mysql工资管理系统

环境说明&#xff1a; JDK1.8 Mysql5.7 开发工具Eclipse或IDEA 代码获取联系方式&#xff1a; QQ:850698824 主要代码 /** To change this template, choose Tools | Templates* and open the template in the editor.*//** MainFrame.java** Created on 2013-6-…

Python之JSON函数介绍

JSON函数 使用 JSON 函数需要导入 json 库&#xff1a;import json。 举例说明&#xff0c;如下&#xff1a; a.json内容格式&#xff1a; {"car":{"price":1100,"color":"red"},"mac":{"price":7999,"col…

自定义docker镜像,ubuntu安装命令并导出

文章目录 问题现象解决步骤相关命令详细介绍docker save 与 docker loaddocker import 与 docker exportdocker commit 问题现象 我们的通讯服务&#xff0c;需要监测前端设备的在线情况&#xff08;是否在线、丢包率、延迟等&#xff09;&#xff0c;使用ping命令去实现此功能…

uniapp原生插件 - android原生插件打包流程 ( 避坑指南一)

【彩带- 避坑知识点】: 当时开发中安卓插件打包成功后&#xff0c;uniapp引用插件aar&#xff0c;用云打包 &#xff0c;总是提示不包含插件。原因是因为module的androidManifest.xml文件没有注册activity。 这一步 很重要&#xff0c;一定要注册。 --------------------------…

百度CTO王海峰:飞桨开发者已达1070万

目录 写在前面 飞桨开发者已达1070万 文心一言用户规模破亿&#xff0c;日提问量快速增长 写在前面 “文心一言用户规模突破1亿。”12月28日&#xff0c;百度首席技术官、深度学习技术及应用国家工程研究中心主任王海峰在第十届WAVE SUMMIT深度学习开发者大会上宣布。会上&…

【智慧门店】东胜物联蓝牙网关助力解决方案商,推动汽车后市场企业智能化升级

截至2023年9月底&#xff0c;我国汽车保有量达3.3亿辆&#xff0c;后市场前景广阔。 随着人工智能、5G、物联网等新技术的普及&#xff0c;汽车后市场企业希望向智能化迈进&#xff0c;借助新兴科技的力量提升汽车维修、车辆保养等服务质量&#xff0c;满足消费者日益增长的需…

第一节 初始化项目

系列文章目录 第一节 初始化项目 文章目录 操作步骤 总结 操作步骤 打开cmd 输入 vue ui 在打开的网页中点击“创建”&#xff0c;复制文件夹路径并粘贴点击“在此创建新项目” 输入项目名称 点击下一步选择手动配置 选择babel、router、vuex、css pre-processors、 linter建…