Java实现阿里云OSS文件上传

1、OSS介绍

阿里云对象存储OSS(Object Storage Service)是一款云存储服务,通常用于图片、音视频、日志等海量文件的存储,并且数据以对象(Object)的形式存储在OSS的存储空间(Bucket )中。详细介绍和说明可以看阿里云的产品文档:产品概述_对象存储(OSS)-阿里云帮助中心。本文是记录使用Java实现OSS的一些基础操作,包括创建存储空间(Bucket)、上传文件、下载文件、查询文件和删除文件。

2、Java代码操作OSS

1. 引入pom依赖
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version>
</dependency>

2. 代码实现基础操作
  • 概念介绍

Bucket是指一块存储空间,类似于电脑的C盘,D盘。 Object(对象)是指一个文档、图片或者音频等。

endpoint类似OSS的访问路径,可以从下面图片的位置获取。

accessKeyId和accessKeySecret是登录阿里云的凭证信息,在右上角个人信息的accessKey管理中获取。

  • 代码逻辑

创建存储空间:调用ossClient.createBucket()方法

上传文件:调用ossClient.putObject()方法

下载文件:调用ossClient.getObject()方法

查询文件:调用ossClient.listObjects()方法

删除文件:调用ossClient.deleteObject()方法

方法的详细介绍和说明可以看官方文档:基础操作_对象存储(OSS)-阿里云帮助中心

  • 示例代码
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.common.auth.CredentialsProvider;
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.OSSObjectSummary;
import com.aliyun.oss.model.ObjectListing;
import com.aliyun.oss.model.PutObjectResult;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;public class AliyunOssUtils {public static String endpoint = "oss-cn-shenzhen.aliyuncs.com";public static String accessKeyId = "your accessKeyId";public static String accessKeySecret = "your accessKeySecret";// 创建阿里云登录凭证public static CredentialsProvider credentialsProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret);// 创建OSSClient实例。public static OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);/*** 创建bucket*/public static void createBucket(){String bucketName = "java-hello-world";try {// 创建存储空间。ossClient.createBucket(bucketName);} catch (Exception e) {System.out.println("Error Message:" + e.getMessage());} finally {if (ossClient != null) {ossClient.shutdown();}}}/*** 上传文件*/public static void uploadFile(){// 填写Bucket名称,如果Bucket不存在, 可以先创建一个String bucketName = "java-hello-world";// 填写Object完整路径,需要包含文件名,但不用包含Bucket名称String objectName = "test/test.txt";try {String content = "Hello OSS";// 采用字节数组方式上传PutObjectResult putObjectResult = ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes()));System.out.println("putObjectResult = " + putObjectResult.toString());} catch (Exception e) {System.out.println("Error Message:" + e.getMessage());} finally {if (ossClient != null) {ossClient.shutdown();}}}/*** 下载文件*/public static void  downloadFile(){// 填写Bucket名称String bucketName = "java-hello-world";// 填写Object完整路径,需要包含文件名,但不用包含Bucket名称String objectName = "test/test.txt";try {// 调用ossClient.getObject返回一个OSSObject实例,该实例包含文件内容及文件元信息。OSSObject ossObject = ossClient.getObject(bucketName, objectName);// 调用ossObject.getObjectContent获取文件输入流,可读取此输入流获取其内容。InputStream content = ossObject.getObjectContent();if (content != null) {BufferedReader reader = new BufferedReader(new InputStreamReader(content));while (true) {String line = reader.readLine();if (line == null) {break;}System.out.println("\n" + line);}// 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。content.close();}} catch (Exception e) {System.out.println("Error Message:" + e.getMessage());} finally {if (ossClient != null) {ossClient.shutdown();}}}/*** 查询某个bucket的Object列表*/public static void getObjectList(){// 填写Bucket名称String bucketName = "java-hello-world";try {// ossClient.listObjects返回ObjectListing实例,包含此次listObject请求的返回结果。ObjectListing objectListing = ossClient.listObjects(bucketName);int size = objectListing.getObjectSummaries().size();System.out.println("=========查询到的对象数量是:"+size);// objectListing.getObjectSummaries获取所有文件的描述信息。for (OSSObjectSummary objectSummary : objectListing.getObjectSummaries()) {System.out.println(" ======================== " + objectSummary.getKey() + "  " +"(size = " + objectSummary.getSize() + ")");}} catch (Exception e) {System.out.println("Error Message:" + e.getMessage());} finally {if (ossClient != null) {ossClient.shutdown();}}}/*** 删除某个对象*/public static void deleteObject(){// 填写Bucket名称String bucketName = "java-hello-world";// 填写Object完整路径,需要包含文件名,但不用包含Bucket名称String objectName = "test/test.txt";try {// 删除文件ossClient.deleteObject(bucketName, objectName);} catch (OSSException e) {System.out.println("Error Message:" + e.getMessage());} finally {if (ossClient != null) {ossClient.shutdown();}}}public static void main(String[] args) throws Exception {
//        uploadFile();
//        downloadFile();
//        getObjectList();
//        deleteObject();}}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

攀登者1 - 华为OD统一考试

OD统一考试 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 题目描述 攀登者喜欢寻找各种地图&#xff0c;并且尝试攀登到最高的山峰。 地图表示为一维数组&#xff0c;数组的索引代表水平位置&#xff0c;数组的元素代表相对海拔高度。其中数组元素0代表地面。…

计算机网络期末知识点总结

计算机网络概述考点 计算机网络的组成 从组成部分看&#xff1a;一个完整的计算机网络主要由硬件、软件、协议三大部分组成&#xff0c;缺一不可。硬件主要指&#xff1a;主机、通信链路、交换设备和通信设备等&#xff1b;软件主要指&#xff1a;用户使用的各种软件&#xf…

虹科方案|从困境到突破:TigoLeap方案引领数据采集与优化

导读&#xff1a;在数字化工厂和智能制造的时代&#xff0c;数据已经成为优化机器和流程的关键。然而&#xff0c;如何高效地收集和处理这些数据&#xff0c;特别是在开发、部署和生产阶段&#xff0c;仍是企业面临的一大挑战。虹科TigoLeap平台&#xff0c;作为一款引领行业变…

设计模式之原型模式【创造者模式】

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

使用 SpringSecurity 发送POST请求出现 403

问题场景 在使用 SpringSecurity 时对一些访问权限进行了设置, 在用户请求资源时出现了403错误 , 通过检查代码发现请求权限是开放的, 并且切换成 GET 请求也是可以通过, 换成POST 请求就无法通过。 解决方法 在 SpringSecurity 中关闭 CSRF 因为 前端向后台发送 post 请求…

自动化测试用例设计粒度

自动化测试用例的粒度指的是测试用例的细致程度&#xff0c;即每个测试用例检查的功能点的数量和范围。 通常&#xff0c;根据测试用例的粒度&#xff0c;可以被分为3种不同的层次&#xff0c;从更低层次的细粒度到更高层次的粗粒度。 第一种&#xff1a;单元测试 - 细粒度 …

JVM工作原理与实战(五):类的生命周期-加载阶段

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、类的生命周期 1.加载&#xff08;Loading&#xff09; 2.连接&#xff08;Linking&#xff09; 3.初始化&#xff08;Initialization&#xff09; 4.使用&#xff08;Using&…

CEC2017(Python):蜣螂优化算法DBO求解CEC2017

一、CEC2017简介 参考文献&#xff1a; [1]Awad, N. H., Ali, M. Z., Liang, J. J., Qu, B. Y., & Suganthan, P. N. (2016). “Problem definitions and evaluation criteria for the CEC2017 special session and competition on single objective real-parameter numer…

Python 介绍和环境准备

一、概述 Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的解释性编程语言。 Python 是一种解释型语言&#xff1a; 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。 Python 是交互式语言&#xff1a; 这意味着&#xff0c;您可以在一个 Python…

MySQL8.0主从复制实现及遇到的个人问题

文章目录 1、准备两个服务器或者虚拟机2、主库配置3、从库配置4、配置过程中使用到的命令5、遇到的问题 1、准备两个服务器或者虚拟机 这里使用的VM虚拟机的Centos、MySQL版本是8.0.26、使用FinalShell进行远程操作。 2、主库配置 修改MySQL配置文件(/etc/my.cnf) #启用二进…

二叉树链式结构的实现(二叉树的遍历以及各种常用功能函数的实现)

之前也是把堆部分的知识点梳理完毕&#xff08;即二叉树链式顺序的实现&#xff09;&#xff1a;堆的应用&#xff1a;堆排序和TOP-K问题 那么讲完了二叉树链式结构的实现。今天就进入二叉树链式结构的实现&#xff1a; 文章目录 1.准备工作2.二叉树的遍历2.1前序遍历2.2中序遍…

User Friendly大会 | 每日互动刘宇分享AIGC时代的数智营销变革

近日&#xff0c;第十九届暨2023年User Friendly国际用户体验大会在深圳召开。本次大会以“开智启能&#xff0c;体验无界”为主题&#xff0c;邀请了各行业领袖精英齐聚&#xff0c;分享前沿新观点&#xff0c;碰撞体验新思潮。每日互动高级副总裁刘宇作为业内资深专家&#x…

二维码地址门牌管理系统:物业管理的未来趋势

文章目录 前言一、数字化管理与便捷服务二、身份认证与安全保障三、业主便利与贴心服务四、未来发展趋势 前言 在数字化时代&#xff0c;物业管理面临着不断增加的挑战。为了提高管理效率、服务业主&#xff0c;二维码门牌管理系统应运而生。本文将探讨这一新型管理方式&#…

navicat密码解密

https://github.com/HyperSine/how-does-navicat-encrypt-password 获取加密的密码 reg query HKEY_CURRENT_USER\SOFTWARE\PremiumSoft\Navicat\Servers /s /v host reg query HKEY_CURRENT_USER\SOFTWARE\PremiumSoft\Navicat\Servers /s /v pwd或者通过导出连接之后查看文…

Unable to connect to Redis server

报错内容&#xff1a; Exception in thread "main" org.redisson.client.RedisConnectionException: java.util.concurrent.ExecutionException: org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 175.24.186.230/175.24.186.230…

【实用安装教程】在win系统下制作Mac OS镜像启动U盘

第一步&#xff1a;制作Mac OS系统引导镜像启动U盘 准备一个8G&#xff08;或以上&#xff09;的U盘插入到win系统的电脑上 去下载TransMac(Mac启动盘制作工具)v10.4按照说明安装好 插入准备好的U盘&#xff0c;U盘数据要转移&#xff0c;打开TransMac&#xff0c;右键U盘选…

ssm基于echarts的基金交易网站的设计与实现论文

摘 要 计算机网络发展到现在已经好几十年了&#xff0c;在理论上面已经有了很丰富的基础&#xff0c;并且在现实生活中也到处都在使用&#xff0c;可以说&#xff0c;经过几十年的发展&#xff0c;互联网技术已经把地域信息的隔阂给消除了&#xff0c;让整个世界都可以即时通话…

基于Spring Boot+Vue的学生信息管理系统【附源码】

介绍 1)登录模块&#xff1a;用户通过输入可以输入编号、邮箱、手机号和密码来登录系统&#xff0c;如果输入错误会返回登录界面&#xff0c;并提示错误信息&#xff0c;成功登录后用户的登录信息会存储在浏览器中&#xff0c;系统会根据这些信息判断该用户的操作权限。 2)系统…

Windows反调试技术学习

Windows反调试 前言元旦快乐&#xff01;&#xff01;&#xff01;通过 API 调用IsDebuggerPresentCheckRemoteDebuggerPresent&#xff08;NtQueryInformationProcess&#xff09;OutputDebugStringZwSetInformationThread&#xff08;ThreadHideFromDebugger&#xff09; 手动…

【占用网络】VoxFormer 基于视觉的3D语义场景方案 CVPR 2023

前言 本文分享“占用网络”方案中&#xff0c;来自CVPR2023的VoxFormer&#xff0c;它基于视觉实现3D语义场景补全。 使用Deformable Attention从图像数据中&#xff0c;预测三维空间中的体素占用情况和类别信息。 VoxFromer是一个两阶段的框架&#xff1a; 第一个阶段&…