• [互动交流] OBS多语言SDK功能与文档焕新,开发体验更流畅(未完待续🚀)
    🚀 OBS多语言SDK功能与文档焕新,开发体验更流畅长期以来,OBS 各语言 SDK 在功能覆盖上存在一定差异,给开发者在技术选型与跨语言项目协作中带来了诸多不便。相信不少开发者都遇到过类似情形:在某语言 SDK 文档中查阅到一项新特性的使用示例,切换到另一语言项目时却发现该能力尚未支持;或是在团队内不同技术栈之间进行方案复用,却因 SDK 功能不统一而不得不额外封装适配层,这对开发效率与体验都造成了客观影响。这一“语言时差”问题,OBS 团队始终高度关注,并致力于从根本上加以解决。过去半年,OBS 团队系统梳理了各语言 SDK 的功能差异清单,以开发者最高频使用的能力集合为基准,对各主流语言 SDK 进行了功能补全与文档体系焕新。本次优化,OBS 主流语言 SDK 的高优能力正在逐步拉齐。本次更新覆盖 Java、Python、C、Go、BrowserJS、PHP、Node.js 七个语言版本,涵盖功能新增与文档优化两大维度。具体更新情况如下:语言(版本)功能新增文档优化Java(v3.26.6)新增桶在线解压、DIS策略、镜像回源、WORM、归档直读、桶加密配置;优化流式上传、依赖冲突、分段上传、上传进度、自定义头域、批量删除等场景;新增临时URL、base64图片上传、对象标签、OkhttpEventListener日志、断点续传回调等示例Python(v3.26.6)新增桶清单、在线解压、对象标签、桶级WORM、DIS策略、归档直读策略;并行文件系统修改写对象新增异步断点续传(含暂停/取消)、MD5校验、恢复指定路径对象、统计文件夹大小、多段复制、WORM创建桶、多范围下载、临时URL指定版本下载、断点续传回调等示例;优化桶加密、自定义域名证书托管C(v3.26.6)新增自定义HTTP头域、指定端口范围;创建/列举并行文件系统;桶自定义域名管理;上传/下载单链接限速;对象生命周期新增配置option、批量复制/上传/下载/恢复对象等示例;优化复制对象、错误码、临时URL授权访问Go(v3.26.6)新增上传回调参数及结果获取;HeadObject检查对象存在;获取上传/下载进度;列举并行文件系统对象新增单链接限速场景下生成授权URL并下载对象(含指定版本)示例;优化创建并行文件系统、设置对象元数据BrowserJS—新增桶归档直读、恢复归档/深度归档、桶加密、对象标签、取消分段上传、复制对象等操作指导;新增MD5校验、批量上传/下载/复制对象示例PHP—新增清理多段上传碎片、创建/列举并行文件系统操作指导;新增批量上传/复制/下载/恢复对象示例Node.js—新增桶归档直读、恢复归档/深度归档、获取下载进度操作指导;新增分段上传、MD5校验、批量上传/复制/下载对象示例本次拉齐的核心价值:本次升级完成后,开发者无需再因“某功能在特定语言 SDK 中是否支持”而反复确认或调整技术方案,技术选型可完全回归业务需求与团队技术栈偏好。官方文档中此前常见的“该功能仅支持 XX 语言”等限制说明,将在本次更新后大幅减少,显著降低开发者在多语言环境下的学习成本与迁移成本。各语言最新版本已全量推送,欢迎升级体验。请点击后续规划:更多语言的 SDK 功能对齐工作已在持续推进中,后续将逐步覆盖更多技术栈,确保广大开发者无论使用何种语言,均可获得一致的开发体验。如您在升级或使用过程中遇到任何问题,欢迎在评论区留言反馈,OBS 团队将及时响应并跟进处理。各语言 Release Notes 详见下方链接:语言版本功能更新文档优化Javav3.26.6支持桶在线解压策略特性支持桶DIS策略特性支持镜像回源特性支持WORM特性支持归档直读功能支持桶加密配置支持下载对象时限速优化上传段支持流式上传相关内容优化依赖缺失和依赖冲突的解决方法优化列举分段上传任务相关内容优化获取上传对象进度的内容优化有关发送请求时添加自定义头域相关内容优化批量删除文件夹下的所有对象相关内容补充通过临时URL访问OBS的代码示例优化传输时校验文件一致性的内容补充上传base64编码图片的代码示例补充设置、获取、删除对象标签的代码示例补充如何配置OkhttpEventListener日志与打印详细阶段日志补充使用断点续传上传时设置上传回调的代码示例PythonV3.26.6支持配置桶清单。支持配置在线解压策略。支持并行文件系统修改写对象。支持配置对象标签。支持配置桶级默认WORM策略。支持配置桶DIS策略。支持配置桶归档直读策略。 补充异步断点续传上传、暂停和取消的代码示例。优化桶加密内容,通过指定加密方式加密桶。优化桶自定义域名里有关证书托管的内容。补充使用MD5校验文件一致性文档。补充恢复指定路径下的对象的代码示例。补充统计文件夹大小的代码示例。补充多段复制的代码示例。补充创建桶时开启WORM开关的代码示例。补充下载对象时指定多个范围的代码示例。补充临时url指定版本号下载对象的代码示例。补充断点续传上传回调的代码示例。Cv3.26.6支持在发起请求时携带自定义HTTP头域支持指定eth0端口范围支持创建和列举并行文件系统支持设置、获取与删除桶的自定义域名支持上传对象时对单链接请求的带宽进行限制支持下载对象时对单链接请求的带宽进行限制支持设置对象生命周期 补充配置option相关代码示例优化复制对象相关代码示例优化服务端错误码的内容以及相关代码示例优化使用临时URL进行授权访问的内容及相关代码示例补充批量复制对象相关代码示例补充批量上传对象相关代码示例补充批量下载对象相关代码示例补充批量恢复对象相关代码示例Gov3.26.6支持上传对象时支持设置回调参数,并将回调结果返回给用户支持通过HeadObject接口检查指定桶中是否存在指定的对象支持获取上传对象的进度支持获取下载对象的进度支持列举并行文件系统内的对象优化创建并行文件系统的内容补充该场景的代码示例:生成在单链接限速场景里下载对象的带授权信息的URL,并下载对象补充该场景的代码示例:生成在单链接限速场景里下载指定版本对象的带授权信息的URL,并下载对象优化有关设置对象元数据相关参数BrowserJS-  不涉及补充设置、获取与删除桶归档存储对象直读策略操作指导补充恢复归档或深度归档存储对象操作指导补充设置、获取与删除桶加密配置操作指导补充设置、获取与删除对象标签操作指导补充取消分段上传任务操作指导补充复制对象操作指导补充MD5校验文件一致性的示例代码补充批量上传对象的代码示例补充批量下载对象的代码示例补充批量复制对象的代码示例PHP-  不涉及补充清理多段上传任务碎片操作指导补充创建和列举并行文件系统操作指导补充批量上传的代码示例补充批量复制的代码示例补充批量下载的代码示例补充批量恢复对象的代码示例Node.js-  不涉及补充设置、获取、删除桶归档直读策略的操作指导补充恢复归档或深度归档存储对象的操作指导补充下载对象时获取下载进度的操作指导补充文件分段上传的代码示例补充使用md5校验文件一致性的示例代码补充批量上传对象的代码示例补充批量复制代码示例补充批量下载对象的代码示例
  • [技术干货] CampFlow 训练营成果管理助手:CodeArts Agent 项目实践
    大家好,我本次训练营完成的项目是 CampFlow 训练营成果管理助手。这是一个面向华为云码道暑期实习训练营的 Web 工作台,用来帮助学生把在线学习、CodeArts Agent 辅助开发、项目构建、华为云部署、案例文档发布和最终作品链接提交这些分散任务整合到一个可追踪的流程中。一、项目背景在训练营实践过程中,我发现项目提交并不只是写出一个能运行的页面,还需要同时完成学习进度、CodeArts Agent 使用过程、项目部署、案例文档、附件材料和最终链接提交。任务节点比较分散,如果只靠临时记录,很容易出现材料遗漏、演示链接忘记回填、评分维度没有证据支撑等问题。因此我设计了 CampFlow,希望它既是一个可运行的训练营成果管理应用,也能反向辅助我整理最终提交材料。它把指导书中的评分维度和提交要求产品化,形成项目档案、里程碑、评分证据、智能体提示词和案例文档生成几个模块,让整个实习项目从开发到提交都更加清晰。二、作品链接作品演示地址:https://campflow-demo-20260727.fangtianchen3.chatgpt.site/案例中心链接:https://devstation.connect.huaweicloud.com/space/devportal/casecenter/11272f6a85244aad99d738b32bac093c/2三、技术选型本项目采用纯静态前端方案,核心技术如下:- CodeArts Agent:辅助需求分析、架构设计、功能开发、测试部署和案例文档整理- HTML / CSS / JavaScript:实现页面结构、交互逻辑和响应式布局- localStorage:在浏览器本地保存项目档案、里程碑、评分证据和开发记录- 华为云 OBS:托管静态网站并提供公网访问地址- Node.js assert:对得分计算、数据模型和文档生成逻辑进行基础测试选择纯静态方案的原因是训练营项目更看重完整交付闭环。静态 Web 应用部署简单、依赖少、访问稳定,适合快速完成从代码构建到华为云部署的全过程。四、需求分析根据训练营指导书,项目成果需要包含可运行应用、案例文档、演示链接或视频,并且 Web 类应用需要部署到华为云。评分维度包括创新易用、功能完备、技术能力、文档完整性和参与度。围绕这些要求,我将需求拆成五个方向:1. 成果管理:记录项目名称、应用方向、技术栈、演示链接和案例链接。2. 过程管理:把学习、开发、部署、发布等训练营节点转化为里程碑。3. 智能体协作:自动生成适合 CodeArts Agent 的阶段性提示词。4. 评分证据:按评分维度整理证据项、完成状态、说明和链接。5. 文档发布:根据项目档案和证据清单生成案例 Markdown 草稿。这样做的好处是,项目不只是“做完一个页面”,而是把提交要求转化成了可以持续检查的工作流。五、系统架构设计CampFlow 的整体结构比较轻量:```text用户浏览器  ├─ index.html:应用入口  ├─ assets/styles.css:界面样式和响应式布局  ├─ assets/app.js:状态管理、评分计算、提示词生成和 Markdown 生成  └─ localStorage:保存项目档案、评分证据、里程碑和开发记录```项目没有引入后端服务,所有数据保存在浏览器本地。对于训练营展示场景来说,这种方案可以降低部署复杂度,也避免后端账号、数据库和接口联调带来的额外成本。六、CodeArts Agent 辅助开发过程本项目按照 vibe coding 的思路使用 CodeArts Agent。我的实践方式不是一次性让智能体直接生成全部代码,而是分阶段推进:第一阶段是需求分析。我先让 CodeArts Agent 根据指导书梳理项目目标、评分维度和必须交付的材料,避免项目范围跑偏。第二阶段是架构设计。我让智能体输出静态前端架构、本地存储数据模型,以及每个页面模块需要承担的职责。第三阶段是功能开发。根据模块拆分,逐步实现仪表盘、项目档案、提示词生成、评分证据、案例文档生成和部署清单。第四阶段是调试验证。重点检查评分计算是否符合权重、localStorage 是否能正常保存、Markdown 文档是否能完整生成、部署文件是否齐全。第五阶段是文档整理。最后让智能体辅助把开发过程、部署步骤、项目亮点和总结整理成案例中心与论坛都能使用的材料。通过这种分阶段协作,CodeArts Agent 更像一个项目搭档,而不是简单的代码生成器。它帮助我把任务拆小,也让我在每一步都有可检查的输出。七、核心功能介绍1. 仪表盘:展示预计得分、证据完成数量、里程碑完成数量,并按指导书权重拆解评分维度。2. 项目档案:维护项目名称、应用方向、真实问题、解决方案、技术栈、考试状态、演示链接和案例链接。3. CodeArts 提示词生成:根据项目当前状态生成需求分析、架构设计、功能开发、调试部署和案例文档五类提示词,方便继续与智能体协作。4. 评分证据清单:按照创新易用、功能完备、技术能力、文档完整性和参与度五个维度组织证据项,支持完成状态和说明记录。5. 案例文档生成器:把项目档案、评分证据和开发记录拼装成 Markdown 草稿,减少最终发布时遗漏章节的风险。6. 部署清单:列出静态网站部署需要上传的文件,并提醒检查 OBS 桶、静态网站首页、公开访问策略和演示链接。八、部署过程项目最终部署在华为云 OBS 静态网站托管上。部署步骤如下:1. 创建 OBS 桶 `campflow-tj-20260726`,区域选择华东-上海一 `cn-east-3`。2. 上传静态网站文件,根目录包含 `index.html`,`assets` 目录包含 `app.js` 和 `styles.css`。3. 开启静态网站托管,默认首页设置为 `index.html`。4. 创建桶策略 `campflow-public-read`,允许公网读取静态网站对象。5. 访问 OBS 静态网站地址,确认页面可以正常打开。验证结果:- 首页 HTTP 状态为 200- 页面内容包含 CampFlow- 静态网站公网地址可访问九、测试与验收项目包含基础逻辑测试,主要验证数据模型、评分计算和文档生成相关逻辑。测试通过后,我又进行了浏览器访问检查,确认页面能够在本地和 OBS 环境中正常运行。验收时重点检查了以下内容:- 页面能正常加载- 仪表盘数据能展示- 表单内容能保存到 localStorage- 提示词能够生成- 案例文档能够生成- OBS 演示链接能够公网访问- 案例中心附件 PDF 小于 20MB十、遇到的问题与解决方式第一个问题是提交材料分散。训练营要求包含代码、部署、案例文档、演示链接等内容,开始时容易只关注开发本身,忽略最终提交材料。因此我把这些要求做成了应用中的评分证据和部署清单。第二个问题是静态部署的公开访问配置。OBS 上传文件后,如果没有正确配置静态网站托管和公开读策略,外部访问会失败。最后通过设置默认首页 `index.html` 和桶策略 `campflow-public-read` 解决。第三个问题是论坛和案例中心链接类型不同。案例中心链接用于案例提交,OBS 链接用于作品演示,而论坛链接用于社区帖子展示。理解这三类链接的区别后,最终提交路径就清晰了。## 十一、项目总结CampFlow 是一次围绕训练营真实提交场景设计的小型工具实践。它不只是一个静态页面,而是把 CodeArts Agent 使用过程、评分标准、部署清单和案例文档整理流程放在同一个工作台里。通过这个项目,我完成了从需求分析、智能体辅助开发、本地测试、OBS 部署、案例中心提交到论坛发布材料整理的完整闭环。后续如果继续扩展,可以加入截图上传、多人协作、华为云登录和一键生成提交材料等能力,让它从个人训练营工具升级为更通用的项目交付助手。以上就是我的训练营项目实践分享,欢迎大家交流指正。
  • [案例共创] CampFlow 训练营成果管理助手:CodeArts Agent 项目实践
    大家好,我本次训练营完成的项目是 **CampFlow 训练营成果管理助手**。这是一个面向华为云码道暑期实习训练营的 Web 工作台,用来帮助学生把在线学习、CodeArts Agent 辅助开发、项目构建、华为云部署、案例文档发布和最终作品链接提交这些分散任务整合到一个可追踪的流程中。## 一、项目背景在训练营实践过程中,我发现项目提交并不只是写出一个能运行的页面,还需要同时完成学习进度、CodeArts Agent 使用过程、项目部署、案例文档、附件材料和最终链接提交。任务节点比较分散,如果只靠临时记录,很容易出现材料遗漏、演示链接忘记回填、评分维度没有证据支撑等问题。因此我设计了 CampFlow,希望它既是一个可运行的训练营成果管理应用,也能反向辅助我整理最终提交材料。它把指导书中的评分维度和提交要求产品化,形成项目档案、里程碑、评分证据、智能体提示词和案例文档生成几个模块,让整个实习项目从开发到提交都更加清晰。## 二、作品链接作品演示地址:https://campflow-tj-20260726.obs-website.cn-east-3.myhuaweicloud.com/案例中心链接:https://devstation.connect.huaweicloud.com/space/devportal/casecenter/11272f6a85244aad99d738b32bac093c/2## 三、技术选型本项目采用纯静态前端方案,核心技术如下:- CodeArts Agent:辅助需求分析、架构设计、功能开发、测试部署和案例文档整理- HTML / CSS / JavaScript:实现页面结构、交互逻辑和响应式布局- localStorage:在浏览器本地保存项目档案、里程碑、评分证据和开发记录- 华为云 OBS:托管静态网站并提供公网访问地址- Node.js assert:对得分计算、数据模型和文档生成逻辑进行基础测试选择纯静态方案的原因是训练营项目更看重完整交付闭环。静态 Web 应用部署简单、依赖少、访问稳定,适合快速完成从代码构建到华为云部署的全过程。## 四、需求分析根据训练营指导书,项目成果需要包含可运行应用、案例文档、演示链接或视频,并且 Web 类应用需要部署到华为云。评分维度包括创新易用、功能完备、技术能力、文档完整性和参与度。围绕这些要求,我将需求拆成五个方向:1. 成果管理:记录项目名称、应用方向、技术栈、演示链接和案例链接。2. 过程管理:把学习、开发、部署、发布等训练营节点转化为里程碑。3. 智能体协作:自动生成适合 CodeArts Agent 的阶段性提示词。4. 评分证据:按评分维度整理证据项、完成状态、说明和链接。5. 文档发布:根据项目档案和证据清单生成案例 Markdown 草稿。这样做的好处是,项目不只是“做完一个页面”,而是把提交要求转化成了可以持续检查的工作流。## 五、系统架构设计CampFlow 的整体结构比较轻量:```text用户浏览器  ├─ index.html:应用入口  ├─ assets/styles.css:界面样式和响应式布局  ├─ assets/app.js:状态管理、评分计算、提示词生成和 Markdown 生成  └─ localStorage:保存项目档案、评分证据、里程碑和开发记录```项目没有引入后端服务,所有数据保存在浏览器本地。对于训练营展示场景来说,这种方案可以降低部署复杂度,也避免后端账号、数据库和接口联调带来的额外成本。## 六、CodeArts Agent 辅助开发过程本项目按照 vibe coding 的思路使用 CodeArts Agent。我的实践方式不是一次性让智能体直接生成全部代码,而是分阶段推进:第一阶段是需求分析。我先让 CodeArts Agent 根据指导书梳理项目目标、评分维度和必须交付的材料,避免项目范围跑偏。第二阶段是架构设计。我让智能体输出静态前端架构、本地存储数据模型,以及每个页面模块需要承担的职责。第三阶段是功能开发。根据模块拆分,逐步实现仪表盘、项目档案、提示词生成、评分证据、案例文档生成和部署清单。第四阶段是调试验证。重点检查评分计算是否符合权重、localStorage 是否能正常保存、Markdown 文档是否能完整生成、部署文件是否齐全。第五阶段是文档整理。最后让智能体辅助把开发过程、部署步骤、项目亮点和总结整理成案例中心与论坛都能使用的材料。通过这种分阶段协作,CodeArts Agent 更像一个项目搭档,而不是简单的代码生成器。它帮助我把任务拆小,也让我在每一步都有可检查的输出。## 七、核心功能介绍1. 仪表盘:展示预计得分、证据完成数量、里程碑完成数量,并按指导书权重拆解评分维度。2. 项目档案:维护项目名称、应用方向、真实问题、解决方案、技术栈、考试状态、演示链接和案例链接。3. CodeArts 提示词生成:根据项目当前状态生成需求分析、架构设计、功能开发、调试部署和案例文档五类提示词,方便继续与智能体协作。4. 评分证据清单:按照创新易用、功能完备、技术能力、文档完整性和参与度五个维度组织证据项,支持完成状态和说明记录。5. 案例文档生成器:把项目档案、评分证据和开发记录拼装成 Markdown 草稿,减少最终发布时遗漏章节的风险。6. 部署清单:列出静态网站部署需要上传的文件,并提醒检查 OBS 桶、静态网站首页、公开访问策略和演示链接。## 八、部署过程项目最终部署在华为云 OBS 静态网站托管上。部署步骤如下:1. 创建 OBS 桶 `campflow-tj-20260726`,区域选择华东-上海一 `cn-east-3`。2. 上传静态网站文件,根目录包含 `index.html`,`assets` 目录包含 `app.js` 和 `styles.css`。3. 开启静态网站托管,默认首页设置为 `index.html`。4. 创建桶策略 `campflow-public-read`,允许公网读取静态网站对象。5. 访问 OBS 静态网站地址,确认页面可以正常打开。验证结果:- 首页 HTTP 状态为 200- 页面内容包含 CampFlow- 静态网站公网地址可访问## 九、测试与验收项目包含基础逻辑测试,主要验证数据模型、评分计算和文档生成相关逻辑。测试通过后,我又进行了浏览器访问检查,确认页面能够在本地和 OBS 环境中正常运行。验收时重点检查了以下内容:- 页面能正常加载- 仪表盘数据能展示- 表单内容能保存到 localStorage- 提示词能够生成- 案例文档能够生成- OBS 演示链接能够公网访问- 案例中心附件 PDF 小于 20MB## 十、遇到的问题与解决方式第一个问题是提交材料分散。训练营要求包含代码、部署、案例文档、演示链接等内容,开始时容易只关注开发本身,忽略最终提交材料。因此我把这些要求做成了应用中的评分证据和部署清单。第二个问题是静态部署的公开访问配置。OBS 上传文件后,如果没有正确配置静态网站托管和公开读策略,外部访问会失败。最后通过设置默认首页 `index.html` 和桶策略 `campflow-public-read` 解决。第三个问题是论坛和案例中心链接类型不同。案例中心链接用于案例提交,OBS 链接用于作品演示,而论坛链接用于社区帖子展示。理解这三类链接的区别后,最终提交路径就清晰了。## 十一、项目总结CampFlow 是一次围绕训练营真实提交场景设计的小型工具实践。它不只是一个静态页面,而是把 CodeArts Agent 使用过程、评分标准、部署清单和案例文档整理流程放在同一个工作台里。通过这个项目,我完成了从需求分析、智能体辅助开发、本地测试、OBS 部署、案例中心提交到论坛发布材料整理的完整闭环。后续如果继续扩展,可以加入截图上传、多人协作、华为云登录和一键生成提交材料等能力,让它从个人训练营工具升级为更通用的项目交付助手。以上就是我的训练营项目实践分享,欢迎大家交流指正。
  • [高校训练营] CampusSpace - 基于华为云码道(CodeArts)代码智能体的校园场地智能预约管理系统
    CampusSpace - 校园场地智能预约管理系统应用构建案例一、概述1.1 案例介绍CampusSpace是一个基于Django框架开发的校园场地智能预约管理系统,旨在解决高校场地预约管理中的痛点问题。系统集成了智能推荐算法、冲突自动检测、批量审批等核心功能,支持教室、实验室、会议室等多种场地类型的预约管理,为校园场地资源的高效利用提供了一站式解决方案。本案例将指导开发者从零开始构建一个功能完整的校园场地预约系统,涵盖用户管理、场地管理、预约审批、智能推荐、数据统计等核心模块,并集成华为云OBS对象存储、Redis缓存等技术,提升系统性能和用户体验。1.2 适用对象高校学生(学习Web开发、系统设计)个人开发者(构建校园应用)企业开发者(了解Django框架、华为云服务集成)1.3 案例时间本案例总时长预计90分钟,包括环境准备(15分钟)、项目构建(50分钟)、测试验证(25分钟)。1.4 案例流程说明:本地安装华为云码道(CodeArts)代码智能体;通过码道开发校园场地智能预约管理系统,并在浏览器中体验。1.5 资源总览本案例预计花费0元(使用免费资源和开发环境)。体验完成后请及时释放资源,避免产生多余的费用。资源名称规格单价(元)华为云对象存储服务OBS标准存储 5GB免费(按需付费)Redis缓存服务本地Redis或云服务免费华为云码道(CodeArts)代码智能体体验版(专业版)免费(按需付费)二、环境和资源准备2.1 下载安装CodeArts代码智能体参考《AI IDE华为云码道(CodeArts)代码智能体安装部署》,下载安装IDE:2.2 开通华为云码道体验版访问专属开通链接,免费开通华为云码道(CodeArts)代码智能体体验版:2.2 登录CodeArts代码智能体安装完成之后,点击打开文件夹或新建项目,用于存放项目文件:登录CodeArts代码智能体:注意:如果已经登录华为账号,直接跳转至登录授权页面,否则,直接拉起华为账号登录界面。自动拉起华为账号登录界面,输入账号和密码:跳转至登录授权页面,点击确认授权:CodeArts代码智能体登录成功:登录成功之后,返回CodeArts代码智能体,即可体验使用。三、通过码道分阶段搭建校园场地智能预约管理系统3.1 需求规格设计在码道对话框输入以下提示词,让码道进行需求规格说明书的创建:你是一名资深产品经理、Django架构师和测试工程师。 我要开发 CampusSpace 智约——校园教室与会议室智能预约及冲突优化平台。 项目目标: 学生或教师输入使用时间、人数和设备需求,系统自动推荐合适场地; 支持固定课表、维修停用、临时预约、冲突检测、审批、取消和利用率统计。 用户角色: 1. 普通用户:查询场地、获取推荐、提交预约、查看和取消预约。 2. 管理员:管理场地、固定课表、维修时间、审批预约和查看统计。 技术栈: Python、Django、Bootstrap、FullCalendar、Chart.js。 本地使用SQLite,部署时可切换MySQL或PostgreSQL。 现在先不要写代码,请依次输出: 1. 需求规格说明书 2. 功能优先级P0/P1/P2 3. 用户故事与验收标准 4. 页面清单 5. 数据表设计 6. 预约状态机 7. 冲突检测规则 8. 推荐算法 9. 项目目录结构 10. 分阶段开发任务清单 请将结果分别保存到docs目录中的Markdown文件。 存在模糊或矛盾的业务规则时先列出问题,不要自行假设。此时,码道会根据步骤创建多个开发文档。这时,我们查看00-业务规则待确认问题.md,并确认业务规则,将修改后的文件发送给码道,码道会根据业务规则完善关键文档。3.2 生成项目结构和配置文件在码道对话框输入以下提示词,让码道生成项目结构和配置文件:请根据docs目录中的需求和设计文件,创建Django项目骨架。 本阶段只完成: 1. 项目初始化 2. 用户登录与退出 3. 管理员和普通用户权限 4. Building与Room数据模型 5. Django管理后台 6. 基础导航和首页 7. 初始化演示数据命令 8. README启动说明3.3 安装Python开发环境步骤1:安装Python 3.9访问Python官网下载并安装Python 3.9版本,确保pip包管理工具可用。步骤2:创建虚拟环境在项目目录下创建虚拟环境,隔离项目依赖:# Windows python -m venv CampusSpace CampusSpace\Scripts\activate # Linux/Mac python3 -m venv CampusSpace source CampusSpace/bin/activate步骤3:安装Django框架安装Django 3.2 LTS版本及项目依赖:pip install Django==3.2.* pip install django-crispy-forms==1.14.0 pip install crispy-bootstrap5==0.7 pip install Pillow==9.5.* pip install python-dateutil==2.8.*3.4 完善核心功能模块在码道对话框输入以下提示词,继续完善核心功能模块。接下来请根据docs目录中的需求和设计文件,实现: 1. 教学楼管理 2. 教室管理 3. 设备条件 4. 固定占用 5. 维修停用3.5 结合Skill实现预约系统3.5.1 实现预约功能在码道对话框输入以下提示词,继续完善核心功能模块。由于预约功能涉及规则较多,需要进行确认后再实现。请调用booking-domain Skill,实现预约核心功能。 要求: 1. 用户选择场地、日期、开始时间和结束时间。 2. 校验开始时间早于结束时间。 3. 校验人数不超过场地容量。 4. 校验设备要求。 5. 校验固定课表冲突。 6. 校验维修时间冲突。 7. 校验已批准预约冲突。 8. 校验同一用户的时间冲突。 9. 冲突时不写入预约数据。 10. 返回明确的冲突原因。 11. 无冲突时创建待审批预约。 12. 为所有规则编写单元测试。 请先说明实现方案和涉及文件,等待我确认后再修改代码。确认所有问题后,码道会根据完整的冲突检测规则实现预约功能。3.5.2 实现场地推荐功能在码道对话框输入以下提示词,加入场地推荐功能。在现有预约系统中实现可解释的场地推荐。 推荐流程: 1. 根据时间冲突、容量、设备和场地状态进行硬性筛选。 2. 对剩余场地计算100分推荐分。 3. 容量匹配35分、设备匹配25分、建筑偏好15分、 空闲连续性15分、节能匹配10分。 4. 返回排名前三的场地。 5. 每个结果必须提供推荐理由和扣分原因。 6. 无合适场地时,推荐最近的可用时间或替代场地。 7. 推荐逻辑与视图层分离。 8. 为排序、并列和无结果场景编写测试。3.5.3 实现审批流程和日历视图功能在码道对话框输入以下提示词,实现审批流程和日历视图功能。实现: - 管理员审批列表 - 同意和拒绝 - 拒绝原因 - 用户个人预约 - 取消预约 - 周日历和月日历 - 不同状态颜色显示3.5.4 实现统计分析功能在码道对话框输入以下提示词,采用服务层设计模式,实现统计分析功能。先生成 SQL/ORM 设计,再生成图表接口,避免统计逻辑散落在页面里。 并验证: - 没有数据时页面不报错 - 只有一条数据时图表正常 - 已取消预约不计入有效利用率 - 固定课表和临时预约是否分别统计3.6 添加华为云OBS和Redis集成3.6.1 配置华为云OBS服务步骤1:开通华为云OBS服务登录华为云控制台,开通对象存储服务OBS。步骤2:创建OBS桶在OBS控制台创建存储桶,用于存储系统上传的文件:桶名称:campusspace-files区域:华北-北京四存储类别:标准存储桶访问权限:公共读步骤3:获取访问密钥在"我的凭证"页面获取访问密钥(AK/SK),用于程序访问OBS服务:步骤4:安装OBS SDK安装华为云OBS Python SDK:pip install esdk-obs-python步骤5:配置环境变量设置OBS访问密钥环境变量:# Windows (PowerShell) $env:HUAWEI_ACCESS_KEY="你的AK" $env:HUAWEI_SECRET_KEY="你的SK" # Linux/Mac export HUAWEI_ACCESS_KEY="你的AK" export HUAWEI_SECRET_KEY="你的SK" 3.6.2 安装Redis缓存服务步骤1:安装RedisWindows用户下载Redis Windows版本,Linux/Mac用户使用包管理器安装:# Ubuntu/Debian sudo apt-get install redis-server # CentOS/RHEL sudo yum install redis # Mac brew install redis步骤2:启动Redis服务# Windows redis-server.exe # Linux/Mac redis-server步骤3:安装Django Redispip install django-redis==5.4.0 pip install redis==5.0.13.6.3 配置项目设置编辑config/settings.py,配置项目设置:# 华为云OBS配置 HUAWEI_OBS_CONFIG = { 'access_key': os.environ.get('HUAWEI_ACCESS_KEY'), 'secret_key': os.environ.get('HUAWEI_SECRET_KEY'), 'server': 'obs.cn-north-4.myhuaweicloud.com', 'bucket_name': 'campusspace-files' } # Redis缓存配置(开发环境使用本地内存) if DEBUG: CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 'LOCATION': 'unique-snowflake', } } else: CACHES = { 'default': { 'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://127.0.0.1:6379/1', 'OPTIONS': { 'CLIENT_CLASS': 'django_redis.client.DefaultClient', }, 'KEY_PREFIX': 'campusspace', 'TIMEOUT': 300, } } 3.6.4 实现华为云 OBS 与 Redis 缓存功能在码道对话框输入以下提示词,实现技术提升。添加以下重要功能和技术提升: 使用华为云 OBS 添加 Redis 缓存 创建 API 文档四、启动项目并反馈可能出现的问题在编码任务完成后,根据启动说明启动项目,检查是否正常运行。注意:在启动项目中或项目运行中可能会出现一些错误,遇到问题的时候我们通过自然语言描述或者截图的方式把错误直接反馈给码道,让码道帮我们解决就可以了。也可以按照个人习惯增加其他的功能,比如批量审批、数据导出、站内消息等,让系统更加完善。注意:由于本应用是由AI创建,每次创建的结果可能不一致,如果想体验上图中的案例,可在本项目源码处下载并体验。五、反馈改进建议如您在案例实操过程中遇到问题或有改进建议,可以到开发者论坛评论区反馈,我们会及时响应处理,谢谢!六、附录项目地址 https://github.com/NanfengCC66/CampusSpace演示视频 https://github.com/NanfengCC66/CampusSpace/blob/main/演示视频.mp4
  • [技术干货] obsfs 重磅升级:obsfs挂载对象桶能力正式上线,本地访问更自由
    | 核心变化:从“仅支持并行文件系统”到“同时支持对象桶&并行文件系统”对于许多开发者而言,obsfs 一直是连接本地文件系统与华为云 OBS的关键工具,但在过去,其“不支持挂载对象存储桶”的限制,让不少习惯使用标准对象存储(OBS Bucket)的开发者感到困扰,不得不在数据访问方式上做出妥协。近期,华为云 OBS 服务对 obsfs 工具进行了重大升级,正式支持将标准的对象存储桶挂载至本地文件系统。这一改变,意味着开发者现在可以像访问本地目录一样,直接操作对象存储桶中的海量数据,为 AI 训练、大数据分析等场景提供了全新的存储访问路径。这一变化最直接的影响是:覆盖更广的使用场景:你可以直接对项目中已有的、正在使用的对象桶进行操作,无需为了使用 obsfs 而额外创建或迁移数据到并行文件系统。降低使用门槛:使得更多开发者可以零成本地尝试用本地文件系统的方式管理云上对象存储。| obsfs 对象桶挂载:能解决什么问题?简单来说,obsfs 是一款基于 FUSE 的文件系统工具,它的核心价值在于零代码改造。无论是日志收集脚本、数据处理任务,还是传统的 Web 应用,都无需修改任何文件读写逻辑,就能将数据持久化到 OBS。新能力带来的典型适用场景包括:日志、归档数据的自动上传:将本地日志目录挂载为 OBS 桶,新产生的日志文件自动进入云存储。数据分析与处理的输入输出:在 Spark、Hadoop 等计算任务中,直接将 OBS 作为数据源和结果存储池。遗留系统的存储云化:对于难以改造的老旧应用,通过挂载方式无缝将数据迁移至 OBS。不过需要了解的是,由于对象桶本身的对象语义限制(不支持追加写、随机写),obsfs 通过 FUSE 层模拟了文件操作。任何“修改”在后台实际是“新对象覆盖旧对象”的适配行为。因此,它更适用于顺序读写的场景,而非高并发、小文件频繁读写的数据库类应用。| 实战:三步挂载,体验新能力如何快速体验这个新能力?以下是将一个 OBS 对象桶挂载到本地的具体操作步骤。1. 获取与安装 obsfsobsfs 支持直接下载和编译两种方式。详细步骤参考官网:方式一:下载并安装obsfs方式二:通过编译生成obsfs2. 初始化访问密钥创建一个密钥文件,用于存放你的 OBS 访问密钥(AK/SK),并设置权限为 600 以确保安全。初始化访问密钥3. 执行挂载命令挂载命令格式:./obsfs obs桶名 本地挂载目录 -o url=区域终端节点地址 -o passwd_file=密钥文件路径 -o bucket_type=object -o multipart_size=128 -o 其他挂载参数假设你有一个名为 my-obs-bucket 的 OBS 对象桶,想挂载到本地 /mnt/obs 目录。执行以下命令即可:./obsfs my-obs-bucket /mnt/obs -o url=obs.cn-south-1.myhuaweicloud.com -o passwd_file=/etc/passwd-obsfs -o bucket_type=object注意这里的关键变化:-o bucket_type=object 参数,用于显式声明挂载的是对象桶。这是使用新能力时必须指定的参数,用以区分以往的并行文件系统挂载。挂载成功后,执行 df -h 就能看到你的对象桶已作为一个文件系统挂载在本地。之后,无论是 cp、mv、rm 等常规文件操作,还是你的应用程序通过标准文件接口读写数据,都会直接映射到 OBS 桶中。| 核心设计解析:对象桶挂载的工作原理与注意事项理解 obsfs 对象桶模式的设计逻辑,能帮助你更好地使用它,避免踩坑。1. 回写模式与数据持久性对象桶挂载采用回写模式。数据会先写入本地临时文件(由 tmpdir 或 use_cache 控制)。在默认情况下,只有当应用调用 close() 关闭文件时,才会触发实际上传,close() 返回成功表示数据已持久化到 OBS。因此,进程异常退出(如 kill -9、断电)可能导致未关闭文件的数据永久丢失。针对大文件的优化:对于超大文件上传,可以通过 -o max_dirty_data=1024(单位MB)等参数设置阈值,当本地未上传的脏数据量超过该值时,obsfs 会自动触发流式分段上传,将已写入的数据提前上传,避免 close() 时因全量重传导致长时间阻塞。实践建议:对于关键数据,务必检查 close() 的返回值;对持久性要求极高的场景,可考虑使用 fsync() 定期刷新(需权衡性能);大文件场景下合理设置 max_dirty_data 和 multipart_size 参数以优化上传效率。2. 缓存机制与性能调优obsfs 提供多个缓存参数,用以提升性能:use_cache:指定本地磁盘缓存目录。启用后,读写的数据会缓存到本地,重复读取时性能显著提升。建议指向高性能的本地 SSD。multipart_size 与 parallel_count:分别控制分段上传的大小和并发线程数,调整这两个参数可以有效利用网络带宽,提升大文件的吞吐量。max_stat_cache_size:控制文件属性(大小、修改时间等)的缓存条目数,减少对 OBS 的 HEAD 请求,提升 ls -l 等操作的响应速度。3. 数据一致性与多挂载点需要注意的是,一个 OBS 桶可以同时挂载到多台服务器上,但各挂载点之间互不感知。obsfs 本身不提供文件锁机制,也无法感知 OBS 的多版本控制。因此,如果多个客户端并发写入同一个文件,可能出现数据覆盖或一致性问题,需要在应用层通过其他方式(如分布式锁)来协调。| 结语从仅支持并行文件系统,到 2026 年 6 月起新增对标准对象桶的挂载支持,obsfs 的这次升级,本质上是将一套统一的本地文件系统访问接口,覆盖到了 OBS 中更广泛、更常用的存储类型上。它为开发者提供了一种零侵入、低成本的云存储接入方式,尤其为那些希望利用云存储但代码改造困难的场景,提供了一条平滑的迁移路径。当然,你也要认识到它在随机写、强一致性场景下的局限,并将其用在合适的地方。关于 obsfs 的完整参数列表和最佳实践,欢迎查阅华为云官方文档。如果你在挂载过程中遇到问题,也欢迎在华为云开发者社区发帖交流,共同探讨。 相关链接:[1] obsfs 开源 GitHub 仓库:cid:link_5[2] obsfs 官方工具指南:cid:link_3[3] 挂载对象存储桶详细指导:cid:link_4
  • 请问BrowserJs SDK的断点续传或分段上传支持回调函数吗?
    通过文档搜索只看到java和ios的断点续传的回调
  • [问题求助] 切片同步不到obs是什么原因啊
    切片同步不到obs是什么原因啊
  • 2020年华为云AI实战营数据集
    在做2020年华为云AI实战营里面的项目时,按照流程下载数据集报错,怎么解决 
  • [产品讨论] OBS 三方库依赖问题
    以下是我在RK3588 盒子上编译出来的so,其依赖的多个其它so,例如libcurl.so.4 libssl.so.3,但是自己应用本身已经有编译好的libcurl与libssl,其版本与其存在差异,我自己的libcurl是:curl-8.2.1,              openssl是:openssl-1.1.1k与build_aarch64.sh的依赖版本不一致。我的问题是可以更换为我已经编好的so吗?要怎么修改?
  • [课程学习] 学习总结(二):网络云服务与存储云服务
    一、网络基础设施的困境与云上架构的价值传统物理网络的隔离与调度痛点传统物理 IDC 机房里,运维人员需要手动划分子网、配置复杂的物理交换机 VLAN,才能实现支付核心环境与普通测试环境的严格隔离。一旦大促期间需要跨机房资源调配,底层网络架构的变更极其缓慢,还极易引发广播风暴等网络不稳定问题。这不是某个团队的问题,是物理网络的天花板。网线插在交换机上,VLAN 写在配置里,改一次就要全网联动。越大的集群,越不敢动。软件定义网络(SDN)的价值重塑云计算网络服务的出现,彻底重塑了网络边界。它允许我们在公共云基础设施上,通过软件逻辑划分出绝对隔离、完全自定义的专属虚拟网络。如果说计算服务(ECS/BMS)是系统的肌肉与骨骼,那么网络云服务(VPC/ELB/NAT)就是负责输送流量的神经网络。它们不仅是保证数据高效流转的通道,更是构建跨可用区(AZ)金融级容灾架构的最坚实底座。从「改配置要全网联动」到「点几下控制台就生效」,这个跨越,是云网络最大的价值。二、典型的网络云服务详解典型的网络云服务包括 VPC(虚拟私有云)、ELB(弹性负载均衡)、NAT 网关以及 VPN(虚拟专用网络)。本周重点梳理这四大核心组件。1. VPC(虚拟私有云)及其核心组件定义与底层逻辑VPC 是用户在云上申请的隔离的、私密的虚拟网络环境。从底层视角来看,它基于隧道网络技术在物理网络之上构建了逻辑隔离层。在一个 VPC 内,我们可以自由定义网段划分(子网)、路由策略(路由表),以及针对实例级别的访问控制(安全组)和子网级别的访问控制(网络 ACL)。简单说,VPC 就是在公共云的物理网络里,用软件「画」出一个只属于你的局域网。别人看不见,也摸不着。核心优势租户级绝对隔离与高可用。 VPC 之间逻辑上完全隔离,实现了租户间的网络多租户安全,天然防范外部网络攻击。同时,VPC 内提供的虚拟 IP(VIP)机制,能完美支持支付数据库主备节点(如基于 Keepalived 的高可用 Redis/MySQL 集群)的秒级漂移接管。极度灵活的网络连通性。 同区域内,可通过「对等连接(VPC Peering)」打通不同 VPC 的私网通信;线上线下混合云场景,也可通过「二层连接网关」实现 IP 不变的业务平滑上云。架构局限与痛点然而,原生的 VPC 对等连接在跨区域(Region)或面对极其庞大的微服务网状网络时,配置与管理会变得异常复杂,通常需要引入更高级的云连接网关(CC)或企业路由器(ER)进行集中化路由管理。常见应用场景云端专属网络隔离(如生产/测试环境严格物理隔离)、Web 应用网站托管、跨业务线的云上 VPC 互连。2. ELB(弹性负载均衡)定义与底层逻辑ELB 是应对高并发流量的「分发中枢」。它通过监听器(支持 TCP/UDP/HTTP/HTTPS)接收外部请求,并根据预设的流量分配策略,将访问流量均匀分发到后端的多个 ECS 服务器组上。想象一个银行大厅,客户排一条长队只开一个窗口,效率极低。ELB 就是那个引导员,把客户分流到所有空闲窗口。核心优势消除单点故障与跨 AZ 容灾。 对于支付网关这类对可用性要求极高的服务,ELB 支持跨可用区部署。结合健康检查机制,当某个节点或 AZ 发生故障时,ELB 能自动屏蔽异常 ECS,将流量无缝倒换至健康节点,从而避免支付链路中断。潮汐流量的弹性削峰。 配合 AS(弹性伸缩服务),ELB 会在流量洪峰时自动将新扩容的 ECS 纳管进后端服务器组,在流量低谷时自动剔除,是应对电商大促等脉冲式流量洪峰的核心抗压利器。架构局限与痛点在处理有状态请求时,如果「会话保持」策略配置不当,可能导致同一个用户的连续支付请求被打到不同的后端节点,从而引发会话状态不一致的问题。常见应用场景高访问量业务流量分发、潮汐业务弹性分发流量、实现业务跨可用区容灾部署。3. NAT 网关与 VPN,边界通信与地址转换定义与底层逻辑NAT 网关。 负责 VPC 内的计算实例与 Internet 之间的网络地址转换,分为 SNAT(源地址转换,用于共享上网)和 DNAT(目的地址转换,用于向公网提供服务)。VPN(虚拟专用网络)。 利用 Internet 建立一条基于 IPSec 协议加密的通信隧道,将企业本地数据中心与云上 VPC 连通。核心优势极致的安全与成本节约(NAT)。 利用 SNAT,支付核心集群的数百台 ECS 无需暴露在公网上(即无需为每台实例购买弹性公网 IP),就能共享同一个 EIP 访问外网(如调用微信/支付宝外部接口),在显著节省成本的同时,也隐藏了内部网络拓扑,提升了安全性。低成本的混合云架构(VPN)。 相比拉一根昂贵的物理专线,VPN 是实现「线下数据中心到云上」即开即用、无缝扩展的最高性价比方案,且基于 IKE/IPsec 协议族保证了交互数据的机密性与完整性。架构局限与痛点VPN 隧道底层依然依赖公共 Internet 链路。在公网拥堵时段可能会出现延迟抖动,对于要求极低延迟(如 10ms 以内)的专线同步场景(例如云边协同中的 CloudPond 与中心云实时同步),VPN 的稳定性无法保证。这时候,云专线(DC)才是正解。4. 补充组件,云连接、云专线与企业路由器初稿聚焦四大核心组件,但华为云网络服务还有几个关键拼图值得了解。云连接(CC)。 跨区域 VPC 互通的集中化管理方案。当业务部署在多个 Region,VPC Peering 的 N² 连接关系会爆炸,CC 用一个中心化的云连接实例统一管理跨 Region 路由,大幅降低运维复杂度。云专线(DC)。 物理层面的专线接入,带宽稳定、延迟极低,是金融核心系统、数据库同步等对网络质量有严苛要求的场景的首选。成本高,但可靠性也高。企业路由器(ER)。 华为云自研的集中式路由管理服务,支持跨 VPC、跨 Region、混合云的统一路由策略配置,是大规模组网的「交通指挥中心」。三、存储基础设施的困境与云上存储的价值传统存储的扩展与运维痛点传统企业数据中心里,存储是真正的「重资产」。买一台 SAN 存储阵列,几十万起步;扩容要提前采购硬盘、停机维护、重新划分 LUN。数据备份靠人工脚本,容灾靠「两地三中心」的物理复制,建设周期以月计,成本以百万计。更头疼的是,不同业务对存储的需求差异极大。数据库要低延迟高 IOPS,视频转码要大吞吐,日志归档要低成本大容量。一套存储打天下,要么性能不够,要么成本浪费。云存储的价值重塑云存储服务的出现,把存储从「买设备」变成了「选服务」。块存储、文件存储、对象存储三种形态,分别对应三种截然不同的访问模式和性能特征。按需选择,弹性扩展,用多少付多少。如果说网络云服务是云架构的神经网络,那存储云服务就是云架构的记忆中枢。数据在这里诞生、流转、沉淀、归档,贯穿业务的全生命周期。四、典型的存储云服务详解华为云存储服务的三大核心组件是 EVS(云硬盘)、OBS(对象存储服务)和 SFS(弹性文件服务)。它们分别对应块存储、对象存储和文件存储三种范式。1. EVS(云硬盘),块存储的绝对主力定义与底层逻辑EVS(Elastic Volume Service)为云服务器(ECS)和裸金属服务器(BMS)提供持久化的块存储服务。底层采用分布式存储架构,数据通过三副本或 EC 纠删码技术冗余保存,单盘数据可靠性高达 99.9999999%(9 个 9)。块存储的逻辑是,它存的是原始二进制数据,不能直接放文件,必须先格式化成文件系统才能用。就像买了一块新硬盘,得先分区格式化才能存东西。核心优势规格丰富,性能分级。 提供极速型 SSD、超高 IO、通用型 SSD V2、高 IO 等多种规格。极速型 SSD 单盘最高可达 256,000 IOPS 和 4,000 MiB/s 吞吐量,满足数据库等极致性能需求。通用型 SSD 则是性价比之选。弹性扩展。 单盘最大可扩容到 32 TiB,最小 1 GiB 步长,支持在线扩容不停机。安全可靠。 三副本保存 + AES-256 数据加密,应用无感知。还提供回收站功能,误删数据 7 天内可恢复。快照备份。 支持手动和自动快照,可基于快照创建新云硬盘,是数据保护和回滚的利器。架构局限与痛点EVS 只能挂载到同一可用区(AZ)的 ECS 上,跨 AZ 不可用。这意味着如果 ECS 发生 AZ 级故障,云硬盘也会跟着不可访问。要实现跨 AZ 容灾,必须搭配存储容灾服务(SDRS)做数据同步复制。常见应用场景数据库数据盘(要求低延迟高 IOPS)、操作系统启动盘、高性能计算、企业核心业务数据存储。2. OBS(对象存储服务),海量数据的终极容器定义与底层逻辑OBS(Object Storage Service)是华为云提供的海量、安全、高可靠、低成本的对象存储服务。它以「桶(Bucket)」和「对象(Object)」为基本存储单位,采用扁平化结构,没有传统文件系统的目录层级。对象存储的底层逻辑和块存储完全不同。它存的是完整的对象(一个文件 + 元数据),通过 HTTP/HTTPS 协议的 RESTful API 访问,不需要挂载到服务器上。你可以把它理解为一个无限容量、永远在线的网盘。核心优势极致的可靠性。 采用多重冗余架构和纠删码技术,数据持久性高达 99.9999999999%(12 个 9),服务可用性达 99.995%。这个数字意味着,存 100 亿个对象,一年内丢失一个的概率都极低。EB 级容量,按需扩展。 不需要预估容量,存多少算多少,从几 GB 到 EB 级无缝扩展。智能分层,成本最优。 提供标准存储、低频访问存储、归档存储三种存储类别。热数据放标准层,温数据降级到低频层,冷数据归档,自动把存储成本压到最低。安全合规。 从账户到对象的细粒度权限控制,传输加密 + 存储加密双重防护,日志审计全链路可追溯。架构局限与痛点OBS 不支持文件系统的随机修改,只能整体覆盖或追加。对于需要频繁原地修改小范围数据的场景(如数据库日志文件),OBS 并不合适,应该用 EVS 或 SFS。常见应用场景大数据分析的数据湖底座、静态网站托管、在线视频点播、数据备份与归档、智能视频监控、基因测序。3. SFS(弹性文件服务),共享存储的优雅方案定义与底层逻辑SFS(Scalable File Service)提供按需扩展的高性能网络共享文件存储(NAS)。它支持标准的 NFS 协议,允许多个 ECS、容器(CCE)同时挂载并共享访问同一个文件系统。如果说 EVS 是「独享硬盘」,OBS 是「无限网盘」,那 SFS 就是「共享文件夹」。多个服务器能同时读写同一份文件,这在很多企业应用场景里是刚需。核心优势多实例共享访问。 同一 VPC 内的多台 ECS 可以同时挂载同一个 SFS 文件系统,天然支持分布式应用的共享数据需求。弹性扩展,按需付费。 容量随数据量自动扩展,不需要预先分配固定大小,用多少付多少。标准协议兼容。 支持 NFS(Linux)和 CIFS(Windows)协议,应用无需改造即可接入。架构局限与痛点SFS 的性能受网络带宽影响,对于极高 IOPS 的数据库场景,SFS 的延迟和吞吐不如 EVS。另外,SFS 只能在 VPC 内部访问,不支持跨 VPC 或公网直接访问。常见应用场景企业办公自动化(OA)、内容管理系统(CMS)、容器共享存储、高性能计算(HPC)的共享工作目录、媒体处理。4. 三大存储服务对比对比维度EVS(云硬盘)OBS(对象存储)SFS(弹性文件服务)存储类型块存储对象存储文件存储存储逻辑原始二进制数据,需格式化对象(文件+元数据),扁平化文件和文件夹的层次结构访问方式挂载到单台 ECS/BMSRESTful API / SDK / 控制台NFS/CIFS 网络挂载共享性通常一对一一对多(互联网级别)一对多(VPC 内共享)性能特征极高 IOPS、极低延迟大吞吐、EB 级容量高性能共享、带宽优先典型场景数据库、系统盘、核心业务数据湖、备份归档、视频OA、CMS、容器存储、HPC五、存储容灾与备份,数据安全的最后防线三大存储服务解决了「怎么存」的问题,但「怎么保」同样关键。华为云提供了两个重要的数据保护服务。1. SDRS(存储容灾服务)SDRS(Storage Disaster Recovery Service)基于 HyperMetro 复制技术,为 ECS 和 EVS 提供跨 AZ 的实时数据同步。生产站点的数据被同步复制到容灾可用区,RPO 达到秒级。当生产 AZ 发生故障时,SDRS 支持一键式容灾切换,将业务快速切换到容灾站点。还支持在线容灾演练,无需停机即可验证容灾切换的有效性。2. CBR(云备份恢复)CBR(Cloud Backup and Recovery)为云服务器和云硬盘提供周期性备份。与 SDRS 的实时同步不同,CBR 是定期快照备份,适合应对误删、数据损坏等逻辑错误。两地三中心架构(SDRS + CBR)这是华为云推荐的经典容灾方案。SDRS 负责同区域跨 AZ 的实时同步(同城灾备),CBR 负责跨 Region 的周期性备份(异地灾备)。生产中心、同城灾备中心、异地灾备中心共同组成两地三中心架构,是金融级容灾的标准配置。六、网络与存储的协同,云架构的完整拼图网络和存储从来不是孤立存在的。在真实的云架构中,它们紧密协同。EVS 必须与 ECS 同 AZ。 网络的可用区边界,直接决定了块存储的可用性边界。跨 AZ 容灾需要 SDRS 打通存储层,也需要 ELB 打通网络层,两者缺一不可。OBS 通过 VPC 端点加速访问。 大数据分析场景中,计算集群(ECS/CCE)在 VPC 内通过内网端点高速访问 OBS,避免公网带宽瓶颈,网络配置直接影响存储吞吐。SFS 的共享依赖 VPC 网络。 多台 ECS 挂载同一个 SFS,前提是它们在同一个 VPC 内。VPC 的子网划分和安全组策略,决定了哪些实例能访问共享存储。VPN/DC 连通混合云存储。 线下 IDC 的数据要备份到云上 OBS,或者线下应用要访问云上 SFS,都需要 VPN 或云专线打通网络通道。网络质量直接决定存储同步的 RPO。网络是通道,存储是落点。通道不稳,数据就到不了;落点不牢,数据就存不住。只有两者都可靠,云架构才能真正扛住生产级的压力。七、总结这次学习梳理了华为云网络云服务和存储云服务的核心组件。网络方面,VPC 是隔离的底座,ELB 是分发的中枢,NAT 网关是边界的翻译官,VPN 是混合云的加密隧道,云连接和企业路由器是大规模组网的指挥中心。它们共同构成了云上流量从接入、分发、隔离到跨域互通的完整链路。存储方面,EVS 是高性能的独享硬盘,OBS 是无限容量的数据容器,SFS 是优雅的共享文件夹。三者各有所长,按场景选择才是正道。SDRS 和 CBR 则为数据安全提供了跨 AZ 容灾和跨 Region 备份的双重保障。我觉得,理解云服务最有效的方式不是逐个背诵产品手册,而是回到真实场景里问自己,我的业务需要什么样的网络通道,需要什么样的存储落点,需要什么样的容灾保障。从需求出发,服务自然就选对了。
  • [问题求助] 【对象存储服务OBS】Java流式下载返回的PDF文件流不完整
    问题现象:使用ObsClient类调用getObject获取对象数据流时未返回文件头验证思路:将返回的数据流保存到临时目录后保存成功,但无法打开,提示:不是一个有效的PDF文件或文件损坏;验证数据流的前四位,不是%PDF。附demo代码及其日志打印记录
  • [互动交流] APINOTSupported
    OBS BrowserJS SDK中createSignedUrlSync生成的URL,可以直接访问吗?我直接访问生成的url报错APINOTSupported 
  • 开通了华为云OBS服务 为什么自动创建的用户组admin组显示高风险呀
    我开通了华为云OBS服务 为什么自动创建的用户组admin组显示高风险呀,有跟鸿蒙应用开发对接的详细官方文档吗
  • [案例共创] 【案例共创】【第9期】基于华为开发者空间 - 云开发环境(容器)+CodeArts代码智能体,实现SeedTab一个属于你自己的新标签页
    案例介绍CodeArts Doer是基于智能生成、智能问答两大核心能力构建起一套全方位、多层次的智能开发体系。在智能生成方面,它能够依据开发者输入的需求描述,准确且高效地生成高质量代码;智能问答功能则如同开发者身边的专属技术顾问。案例内容一、概述1. 案例介绍华为开发者空间,是为全球开发者打造的专属开发者空间,致力于为每位开发者提供一台云主机、一套开发工具和云上存储空间,汇聚昇腾、鸿蒙、鲲鹏、GaussDB、欧拉等华为各项根技术的开发工具资源,并提供配套案例指导开发者从开发编码到应用调测,基于华为根技术生态高效便捷的知识学习、技术体验、应用创新。CodeArts Doer是基于智能生成、智能问答两大核心能力构建起一套全方位、多层次的智能开发体系。在智能生成方面,它能够依据开发者输入的需求描述,准确且高效地生成高质量代码;智能问答功能则如同开发者身边的专属技术顾问。本案例基于华为开发者空间+CodeArts Doer,实现SeedTab标签页,实用,强大的新建起始页,定制属于你的浏览器。2. 适用对象企业个人开发者高校学生3. 案例时间本案例总时长预计60分钟。4. 案例流程说明:用户使用VS Code远程连接云开发环境并安装CodeArts Doer代码智能体;使用CodeArts Doer代码智能体,自动生成商品管理Web应用;浏览器体验Seedtab。5. 资源总览本案例预计花费0元。资源名称规格单价(元)时长CodeArts代码智能体通用体验版免费60分钟华为开发者空间 - 云开发环境(容器)鲲鹏通用计算增强型 kc1 | 2vCPUs | 4G | HCE免费60分钟对象存储服务 (可选)40G1每月二、基础环境与资源准备1. VS Code远程连接云开发环境参考案例《华为开发者空间 - 云开发环境(容器)IDE插件远程连接操作指导》,使用VS Code的Huawei Developer Space 插件,远程连接华为开发者空间云开发环境。2. VS Code安装CodeArts Doer代码智能体点击Extensions图标,搜索CodeArts Doer for Coding,点击Install安装插件:安装完成后,点击CodeArts Doer插件图标,点击HUAWEI ID login:点击Open,打开外部网站:输入华为账号和密码,登录CodeArts Doer代码智能体:CodeArts Doer代码智能体登录成功:首次使用CodeArts Doer代码智能体,会进入开通页面。需要勾选“我已阅读并同意”后,单击“立即开通”,等待套餐开通完成。返回VS Code测试CodeArts Doer代码智能体,输入问题:你好,请介绍自己!3.设置Agent模式点击Agent,再点击设置:点击Auto Approve后面的Not enabled,授权所有操作:点击返回后,即可使用CodeArts Doer代码智能体。三、SeedTab应用实践1. CodeArts Doer生成代码输入以下指令:使用nodejs+h3+vue,构建一个新标签页,要求如下: 1、UI布局合理,界面美观; 2、实现链接挂件的添加; 3、实现搜索框挂件的添加; 4、实现时间挂件的添加; 5、设置中可以修改背景以及使用华为obs进行数据备份; 6、代码可直接运行。点击发送按钮后,CodeArts Doer代码智能体会创建项目文件并生成代码:大约几分钟之后,CodeArts Doer代码智能体帮助我们创建了项目文件,生成了完整的代码并安装了项目依赖代码目录结构:2.项目目录结构和关键代码释义经过不断测试和调试最终会生成你需要的代码,我已经上传到Gitcode,可以通过git下载源码到本地,代码仓库地址:https://gitcode.com/zhepama/seedtabseedtab/ ├── public/ # 静态资源目录 ├── server/ # 后端服务器 │ ├── middlewares/ # 中间件 │ │ ├── auth.js # API 认证中间件 │ │ └── cors.js # CORS 跨域中间件 │ ├── routes/ # 路由 │ │ └── sync.js # 数据同步路由 │ ├── config.js # 配置文件 │ └── index.js # 服务器入口 ├── src/ # 前端源码 │ ├── assets/ # 资源文件 │ ├── components/ # 公共组件 │ ├── composables/ # 组合式函数 │ ├── config/ # 配置文件 │ ├── store/ # 状态管理 │ │ ├── index.ts # Store 管理器 │ │ ├── grid.ts # 网格布局状态 │ │ ├── setting.ts # 设置状态 │ │ ├── storage.ts # 存储工具 │ │ └── backup.ts # 备份工具 │ ├── types/ # TypeScript 类型定义 │ │ ├── grid.ts # 网格相关类型 │ │ └── widget.ts # 组件相关类型 │ ├── utils/ # 工具函数 │ │ ├── widgetRegister.ts # 组件注册器 │ │ ├── backgroundUtils.ts # 背景工具 │ │ └── proxy.ts # 代理工具 │ ├── widgets/ # 小组件目录 │ │ ├── calendar/ # 日历组件 │ │ ├── clock/ # 时钟组件 │ │ ├── link/ # 链接组件 │ │ ├── note/ # 笔记组件 │ │ ├── search/ # 搜索组件 │ │ └── todo/ # 待办事项组件 │ ├── main.ts # 应用入口 │ └── App.vue # 根组件 ├── dist/ # 构建输出目录 ├── package.json # 项目依赖配置 ├── vite.config.ts # Vite 配置 ├── tsconfig.json # TypeScript 配置 └── index.html # HTML 入口文件1. 应用入口 (src/main.ts)async function startApp() { await registerServiceWorker(); // 注册 Service Worker const storeManager = useStoreManager(); await storeManager.initializeStores(); // 初始化所有 Store const app = createApp(App); app.use(ContextMenu); // 注册右键菜单 app.mount('#app'); } 关键步骤:注册 Service Worker 实现离线缓存初始化 Store 管理器,加载所有状态数据创建 Vue 应用实例并挂载2. Store 管理器 (src/store/index.ts)class StoreManager { private static instance: StoreManager | null = null; private stores: StoreModule[] = []; static getInstance(): StoreManager { if (!StoreManager.instance) { StoreManager.instance = new StoreManager(); } return StoreManager.instance; } async initializeStores(): Promise<void> { for (const store of this.stores) { if (store.loadInitialData) { await store.loadInitialData(); // 加载初始数据 } } } } 关键步骤:使用单例模式管理所有 Store统一初始化所有 Store 的初始数据确保数据加载完成后再渲染应用3. 网格布局 Store (src/store/grid.ts)class GridStore implements StoreModule { public items: GridItem[] = []; public reload = ref(false); async getGridItems(): Promise<GridItem[]> { this.items = await storage.getItem('gridItems') || [/* 默认数据 */]; return this.items; } async save(): Promise<void> { await storage.setItem('gridItems', this.items); } async refreshItems(items: GridItem[]) { this.items = items; await this.save(); this.reload.value = true; // 触发重新加载 } } 关键步骤:使用 unstorage 实现数据持久化提供默认的小组件配置(时钟、搜索、链接)通过 reload ref 触发界面更新4. 组件注册器 (src/utils/widgetRegister.ts)class WidgetRegister { private components: Map<string, WidgetConfig> = new Map() register(config: WidgetConfig) { this.components.set(config.type, config) } registerWidgets(widgetModules: Record<string, { widgetConfig: WidgetConfig; }>): WidgetConfig[] { // 按 order 属性排序 const sortedEntries = Object.entries(widgetModules) .filter(([_, module]) => module.widgetConfig && module.widgetConfig.disabled !== true) .sort(([, a], [, b]) => { const orderA = a.widgetConfig.order ?? Infinity const orderB = b.widgetConfig.order ?? Infinity return orderA - orderB }) // 注册排序后的组件 sortedEntries.forEach(([_, module]) => { widgetRegister.register(module.widgetConfig) }) return Array.from(this.components.values()) } createGridItem(type: string, data: any): GridItem { const config = this.getConfig(type) if (!config) throw new Error(`Component type ${type} not found`) return { id: uuidv4(), component: type as any, data: data || {} } } } 关键步骤:使用 Map 存储所有组件配置支持组件排序(order 属性)自动生成 UUID 创建新的 GridItem支持组件禁用控制5. 组件配置类型 (src/types/widget.ts)export interface WidgetConfig { type: string; // 组件类型标识 styles?: Record<string, any>; name: string; // 组件显示名称 w: number; // 宽度(网格单位) h: number; // 高度(网格单位) order?: number; // 排序优先级 view: Component; // 组件视图 disabled?: boolean; // 是否在菜单中隐藏 keepDefaultSize?: boolean; createWidget?: () => Promise<any>; // 创建组件时的回调 settings?: Component[]; // 设置面板组件 widgetContextMenu?: WidgetContextMenuItem[]; // 组件右键菜单 canvasContextMenu?: CanvasContextMenuItem[]; // 画布右键菜单 } 6. 后端服务器 (server/index.js)const app = new H3(); // 全局 CORS 中间件 app.use(corsMiddleware); // API 路由 app.use("/api/sync/upload", uploadHandler); app.use("/api/sync/download", downloadHandler); // 静态文件服务 app.use("/**", (event) => { return serveStatic(event, { indexNames: ["/index.html"], getContents: (id) => readFile(join(distPath, id)), getMeta: async (id) => { const stats = await stat(join(distPath, id)).catch(() => { }); if (stats?.isFile()) { return { size: stats.size, mtime: stats.mtimeMs, }; } }, }); }); serve(app, { port }); 关键步骤:使用 H3 框架构建服务器配置 CORS 跨域支持提供 API 路由和静态文件服务7. 数据同步 (server/routes/sync.js)export const uploadHandler = eventHandler(async (event) => { try { apiTokenAuth(event); // 1. 认证 const body = await readBody(event); const { key, data } = body; await obsOperation('putObject', { Bucket: bucketName, Key: key, Body: JSON.stringify(data), ContentType: 'application/json' }); return { success: true, message: "Upload successful" }; } catch (error) { return { success: false, error: error.message }; } }); export const downloadHandler = eventHandler(async (event) => { try { apiTokenAuth(event); // 1. 认证 const query = getQuery(event); const key = query.key; const result = await obsOperation('getObject', { Bucket: bucketName, Key: key, }); const content = result.InterfaceResult.Content.toString(); const data = JSON.parse(content); return { success: true, message: "Download successful", data }; } catch (error) { return { success: false, error: error.message }; } }); 关键步骤:使用华为云 OBS 进行数据存储API Token 认证机制上传:将数据序列化为 JSON 上传到 OBS下载:从 OBS 下载并反序列化数据3. 运行生成的代码运行代码:打开TERMINAL窗口,进入项目目录下,执行命令:cd seedtab npm install npm run dev:server点击Open in Browser:4. 测试体验SeedTab添加链接:右键点击页面,添加组件->链接组件待办事项:我的便签:日历组件:随机壁纸:更多设置:点击右上角的设置按钮,或者右键->系统设置,可以打开设置页面,在设置页面你可以设置网格和背景5. 备份到华为云的对象存储在项目根目录下创建一个 .env 文件,参考 .env.example 进行配置:cp .env.example .env打开配置文件.env,修改配置参数。配置项说明:变量名必填描述示例APP_ACCESS_TOKEN✅备份密钥,避免他人访问网页后可以备份``OBS_SERVER✅连接OBS的服务地址``OBS_ACCESS_KEY_ID✅OBS访问密钥中的AK。``OBS_SECRET_ACCESS_KEY✅OBS访问密钥中的SK。``OBS_BUCKET✅OBS的bucker``OBS_ACCESS_KEY_ID= OBS_SECRET_ACCESS_KEY= OBS_SERVER= OBS_BUCKET= APP_ACCESS_TOKEN=1234567809 在网页的设置中备份令牌的值配置相同的APP_ACCESS_TOKEN,然后点击,备份和恢复就可以保存你的数据了…如果备份成功会在你的对象存储控制台中看到备份的数据注意:因为SeedTab应用是Agent自动生成的,每次提问设计生成的代码及最后的运行结果均存在出入,开发者可根据自己的需求,调教模型生成自己想要的结果。若想体验与案例一样的结果,请下载源码https://gitcode.com/zhepama/seedtab至本地运行。至此,基于华为开发者空间+CodeArts Doer,实现SeedTab标签页的案例已全部完成。我正在参加【案例共创】【第9期】基于开发者空间-云开发环境(容器)+ CodeArts Doer代码智能体完成应用开发/调试实践cid:link_3
  • [互动交流] C SDK demo
    新人小白 请问大佬OBS的C SDK里的demo如何运行,我设置了AK SK 还有终端节点 运行demo的时候一直报错create bucket esdk-c-test failed(NameLookupError).create bucket bucket-src failed(NameLookupError).create bucket bucket-target failed(NameLookupError).create bucket bucket-version with option failed(NameLookupError).
总条数:1487 到第
上滑加载中