尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

阿里云文件上传oss存储

阿里云文件上传oss存储
📅 发布时间:2026/6/18 19:30:56

文档地址

https://help.aliyun.com/zh/oss/object-file-object/

创建存储空间(Bucket)

https://oss.console.aliyun.com/bucket

出于安全考虑,OSS 控制台默认开启阻止公共访问,仅支持创建私有权限的Bucket。

如需改为 公共读 或 公共读写,请按以下步骤操作:

  1. 单击目标Bucket名称进入该Bucket。

  2. 在左侧导航栏选择 权限控制 > 阻止公共访问,关闭该策略。

  3. 切换至 读写权限 页签,单击 设置。

  4. 按引导修改 Bucket 的读写权限为公共读或公共读写。

引入sdk

<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.17.4</version>
</dependency>
如果使用的是Java 9及以上的版本,则需要添加以下JAXB相关依赖。
<dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.1</version>
</dependency>
<dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency><groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime</artifactId><version>2.3.3</version>
</dependency>

java代码

@Slf4j
public class OssFileUploaderUtil {private static final String accessKeyId = "xxxxxxx";private static final String accessKeySecret = "xxxxxxxxx";// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。private static final String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";private static final String bucketName = "work";// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。private static final String region = "cn-hangzhou";private final boolean isPublicBucket = false; // 是否为公开Bucket(影响下载链接生成方式)/*** 上传字节流到OSS并返回下载链接* @param fileBytes 文件字节数组(如Excel模板的字节流)* @param fileName 文件名(含扩展名,如:用户模板_20250910.xlsx)* @param fileDir OSS存储目录(如:user/templates/,末尾需带斜杠)* @param contentType 文件MIME类型(如:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet)* @return 可直接访问的下载链接* @throws IOException 流处理异常*/public static String upload(byte[] fileBytes, String fileName, String fileDir, String contentType) throws IOException {// 1. 构建OSS文件完整路径(目录+文件名)String objectPath = fileDir + fileName;log.info("开始上传文件到OSS,路径:{}", objectPath);OSS ossClient = null;ByteArrayInputStream inputStream = null;try {// 2. 初始化OSS客户端DefaultCredentialProvider credentialProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret);ClientBuilderConfiguration clientConfig = new ClientBuilderConfiguration();clientConfig.setSignatureVersion(SignVersion.V4); // 使用V4签名算法ossClient = OSSClientBuilder.create().endpoint(endpoint).credentialsProvider(credentialProvider).clientConfiguration(clientConfig).region(region).build();// 3. 配置文件元数据ObjectMetadata metadata = new ObjectMetadata();metadata.setContentType(contentType); // 关键:指定文件类型,避免下载异常metadata.setContentLength(fileBytes.length); // 设置文件大小metadata.setContentEncoding("UTF-8");// 4. 上传文件流inputStream = new ByteArrayInputStream(fileBytes);PutObjectRequest putRequest = new PutObjectRequest(bucketName, objectPath, inputStream, metadata);ossClient.putObject(putRequest);log.info("文件上传OSS成功,路径:{}", objectPath);// 5. 生成下载链接return generateDownloadUrl(objectPath);} catch (OSSException e) {log.error("OSS上传失败!错误码:{},请求ID:{}", e.getErrorCode(), e.getRequestId(), e);throw new RuntimeException("文件上传OSS失败:" + e.getMessage(), e);} finally {// 6. 释放资源if (inputStream != null) {inputStream.close();}if (ossClient != null) {ossClient.shutdown();}}}/*** 生成文件下载链接* @param objectPath OSS上的文件完整路径(如:user/templates/用户模板.xlsx)* @return 下载链接(公开Bucket返回永久链接,私有Bucket返回带签名的临时链接)*/private static String generateDownloadUrl(String objectPath) {try {// 编码文件名(处理中文/特殊字符)String encodedPath = URLEncoder.encode(objectPath, StandardCharsets.UTF_8.name()).replaceAll("\\+", "%20");            if (isPublicBucket) {// 公开Bucket:直接拼接HTTP URLString endpointHost = endpoint.replace("https://", "");String fileUrl = String.format("https://%s.%s/%s", bucketName, endpointHost, encodedPath);log.info("文件地址:{}", fileUrl);return fileUrl;
            } else {
                // 私有Bucket:生成带签名的临时URL(有效期1小时)
                Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
                return ossClient.generatePresignedUrl(bucketName, objectPath, expiration).toString();
            }} catch (Exception e) {log.error("生成下载链接失败", e);throw new RuntimeException("生成文件下载链接失败", e);}}}

 

相关新闻

  • AT_agc014_f [AGC014F] Strange Sorting
  • 智能充气泵PCBA方案
  • 数字设计中的多级同步器(multi-stage synchronizer)

最新新闻

  • PyCaret低代码实现房价预测:从数据准备到模型上线全链路
  • 【Springboot毕设全套源码+文档】基于springboot的智慧仓库(丰富项目+远程调试+讲解+定制)
  • 2026年6月PE排水管企业推荐指南 - 多才菠萝
  • 全维度测评报告:2026 杭州黄金回收报价套路拆解,称重、验金、扣费猫腻逐项核验 - 奢侈品回收评测
  • DSP56800到DSP56800E代码移植:AGU寄存器加载策略与兼容性问题详解
  • Python自动化测试实战:从Selenium到Pytest的完整技术栈解析

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号