Token导航 LogoToken导航TokenDH.com
待分类敏感数据github未标认证来源可访问许可证需确认审计通过

file-oss-management文件 oss 管理

Agent Skill

file-oss-management 用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要围绕仓库状态、代码变更或协作事项进行整理时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

196

周安装

8

GitHub Stars

11

下载量

63
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:file-oss-management(文件 oss 管理)
来源仓库:https://github.com/xu-cell/ai-engineering-init
仓库路径:skills/file-oss-management
安装命令:
npx skills add https://github.com/xu-cell/ai-engineering-init --skill file-oss-management
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/xu-cell/ai-engineering-init --skill file-oss-management

简介

file-oss-management 用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息。

  • 适合在 Codex、Claude、Cursor、Gemini CLI 中围绕仓库状态或协作事项进行整理。
  • 通过 npx skills add 命令从指定仓库安装并使用。
  • 建议确认权限范围和维护状态,注意是否触发联网或文件读写操作。
  • 可结合原始 README 进一步核验具体用法和功能边界。

SKILL.md

文件与云存储指南

统一协议:基于 AWS S3 SDK v2,兼容所有 S3 协议云服务

架构概述

组件说明
[你的OssClient]统一操作入口(基于 AWS S3 SDK v2)
S3ClientAWS SDK 底层客户端
UploadResult上传结果(url, filename, eTag)

一、S3 Client 初始化

import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.presigner.S3Presigner;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.regions.Region;

// 通用 S3 客户端构建(兼容 MinIO / 阿里云 / 腾讯云等)
S3Client s3Client = S3Client.builder()
    .endpointOverride(URI.create(endpoint))
    .credentialsProvider(StaticCredentialsProvider.create(
        AwsBasicCredentials.create(accessKey, secretKey)))
    .region(Region.of(region))
    .forcePathStyle(true)   // MinIO 需要开启
    .build();

二、文件上传

基础上传

import software.amazon.awssdk.services.s3.model.PutObjectRequest;
import software.amazon.awssdk.core.sync.RequestBody;

// 上传文件
PutObjectRequest request = PutObjectRequest.builder()
    .bucket(bucketName)
    .key("images/photo.jpg")
    .contentType("image/jpeg")
    .build();

s3Client.putObject(request, RequestBody.fromFile(file.toPath()));

// 上传输入流
s3Client.putObject(request, RequestBody.fromInputStream(inputStream, contentLength));

// 上传字节数组
s3Client.putObject(request, RequestBody.fromBytes(data));

封装上传服务(推荐模式)

@Service
@RequiredArgsConstructor
public class OssService {

    private final S3Client s3Client;
    private final OssProperties properties;

    /**
     * 上传文件,自动生成路径
     */
    public UploadResult upload(MultipartFile file) {
        String suffix = getFileSuffix(file.getOriginalFilename());
        String key = generateObjectKey(suffix);  // 如 2026/03/07/uuid.jpg

        PutObjectRequest request = PutObjectRequest.builder()
            .bucket(properties.getBucketName())
            .key(key)
            .contentType(file.getContentType())
            .build();

        s3Client.putObject(request,
            RequestBody.fromInputStream(file.getInputStream(), file.getSize()));

        return UploadResult.builder()
            .url(properties.getDomain() + "/" + key)
            .filename(key)
            .build();
    }

    private String generateObjectKey(String suffix) {
        String datePath = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd"));
        return datePath + "/" + UUID.randomUUID() + suffix;
    }
}

三、文件下载

import software.amazon.awssdk.services.s3.model.GetObjectRequest;
import software.amazon.awssdk.core.ResponseInputStream;

// 下载到输出流(推荐用于HTTP响应)
GetObjectRequest getRequest = GetObjectRequest.builder()
    .bucket(bucketName)
    .key("images/photo.jpg")
    .build();

ResponseInputStream<?> response = s3Client.getObject(getRequest);

// 写入 HTTP 响应
try (InputStream is = response) {
    httpResponse.setContentType("image/jpeg");
    httpResponse.setContentLengthLong(response.response().contentLength());
    is.transferTo(httpResponse.getOutputStream());
}

四、文件删除

import software.amazon.awssdk.services.s3.model.DeleteObjectRequest;

DeleteObjectRequest deleteRequest = DeleteObjectRequest.builder()
    .bucket(bucketName)
    .key("images/photo.jpg")
    .build();

s3Client.deleteObject(deleteRequest);

五、预签名 URL

import software.amazon.awssdk.services.s3.presigner.S3Presigner;
import software.amazon.awssdk.services.s3.presigner.model.*;

S3Presigner presigner = S3Presigner.builder()
    .endpointOverride(URI.create(endpoint))
    .credentialsProvider(credentialsProvider)
    .region(Region.of(region))
    .build();

// 下载预签名URL
GetObjectPresignRequest getPresignRequest = GetObjectPresignRequest.builder()
    .signatureDuration(Duration.ofMinutes(60))
    .getObjectRequest(b -> b.bucket(bucketName).key("images/photo.jpg"))
    .build();
String downloadUrl = presigner.presignGetObject(getPresignRequest).url().toString();

// 上传预签名URL(前端直传)
PutObjectPresignRequest putPresignRequest = PutObjectPresignRequest.builder()
    .signatureDuration(Duration.ofHours(1))
    .putObjectRequest(b -> b.bucket(bucketName).key("images/upload.jpg"))
    .build();
String uploadUrl = presigner.presignPutObject(putPresignRequest).url().toString();

六、Controller 接口(设计模式)

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/oss")
public class OssController {

    private final OssService ossService;

    @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public UploadResult upload(@RequestPart("file") MultipartFile file) {
        return ossService.upload(file);
    }

    @GetMapping("/download/{id}")
    public void download(@PathVariable Long id, HttpServletResponse response) throws IOException {
        ossService.download(id, response);
    }

    @DeleteMapping("/{ids}")
    public void delete(@PathVariable List<Long> ids) {
        ossService.deleteByIds(ids);
    }
}

七、配置模型

# application.yml
oss:
  endpoint: https://s3.amazonaws.com    # 或 MinIO/阿里云/腾讯云端点
  access-key: your-access-key
  secret-key: your-secret-key
  bucket-name: your-bucket
  region: us-east-1
  domain: https://cdn.example.com       # 自定义域名(可选)
@Data
@ConfigurationProperties(prefix = "oss")
public class OssProperties {
    private String endpoint;
    private String accessKey;
    private String secretKey;
    private String bucketName;
    private String region;
    private String domain;
}

八、服务商对照

服务商endpoint 示例备注
阿里云 OSShttps://oss-cn-hangzhou.aliyuncs.comS3 兼容
腾讯云 COShttps://cos.ap-guangzhou.myqcloud.comS3 兼容
七牛云https://s3-cn-south-1.qiniucs.comS3 兼容
MinIOhttp://localhost:9000forcePathStyle(true)
AWS S3https://s3.amazonaws.com原生支持

九、设计要点

  1. 统一封装:通过 S3 协议统一对接多个云服务商,切换只需改配置
  2. 路径生成:按日期+UUID生成对象路径,避免冲突
  3. 私有桶:私有桶文件通过预签名URL访问,设置合理的过期时间
  4. 文件记录:上传后保存数据库记录,关联业务数据
  5. 大文件:超过 100MB 考虑分片上传(CreateMultipartUpload
  6. 安全:前端直传使用预签名URL,不暴露密钥

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

36.05%
按下载量换算23

Claude

29.5%
按下载量换算19

Cursor

17.59%
按下载量换算11

Gemini CLI

9.41%
按下载量换算6

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

敏感数据

该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills