jpskill.com
📦 その他 コミュニティ

s3-upload-handler

UI部品やクライアント側の処理、サーバー側の処理を含め、S3へのファイルアップロードを総合的に扱い、スムーズなファイル共有やデータ管理を実現するSkill。

📜 元の英語説明(参考)

Handle S3 file uploads including UI components, client-side logic, and server-side processing

🇯🇵 日本人クリエイター向け解説

一言でいうと

UI部品やクライアント側の処理、サーバー側の処理を含め、S3へのファイルアップロードを総合的に扱い、スムーズなファイル共有やデータ管理を実現するSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o s3-upload-handler.zip https://jpskill.com/download/16915.zip && unzip -o s3-upload-handler.zip && rm s3-upload-handler.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/16915.zip -OutFile "$d\s3-upload-handler.zip"; Expand-Archive "$d\s3-upload-handler.zip" -DestinationPath $d -Force; ri "$d\s3-upload-handler.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して s3-upload-handler.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → s3-upload-handler フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

S3 Upload Handler Skill

この Skill は、事前構築済みの UI コンポーネント、カスタムのクライアントサイドロジック、またはサーバーサイド処理を使用して、AWS S3 へのファイルアップロードを処理する方法を提供します。

機能

  1. UI Component: ドラッグアンドドロップまたはボタンアップロード用の、すぐに使用できる S3Uploader
  2. Client SDK: カスタムアップロードインターフェース用の ClientS3Uploader クラス。
  3. Server Utilities: バックエンドでのファイル処理とアップロード用の uploadFromServer

使用パターン

1. 標準 UI Component (推奨)

ほとんどのユーザー向けアップロードニーズには、S3Uploader コンポーネントを使用します。

import { S3Uploader } from "@/components/ui/s3-uploader/s3-uploader";

// フォームまたはページでの使用例
<S3Uploader
  presignedRouteProvider="/api/app/your-upload-route" // 署名付き URL を取得するための API ルート
  variant="dropzone" // または "button"
  maxFiles={5}
  accept="image/*" // または ".pdf,.doc" のような特定の拡張子
  onUpload={async (fileUrls) => {
    console.log("Files uploaded:", fileUrls);
    // 成功時の処理 (例: フォームの状態を更新)
  }}
/>

2. カスタムクライアントサイドアップロード

UI を完全に制御する必要がある場合は (例: 非表示の入力、カスタムボタン)、ClientS3Uploader を使用します。

import { ClientS3Uploader } from "@/lib/s3/clientS3Uploader";

// 初期化
const uploader = new ClientS3Uploader({
  presignedRouteProvider: "/api/app/your-upload-route"
});

// ファイルのアップロード
const url = await uploader.uploadFile(fileObject);

3. サーバーサイドアップロード

ストレージの前にファイルを処理する (サイズ変更、PDF の生成) 場合は、API ルートまたは Server Actions で uploadFromServer を使用します。

import uploadFromServer from "@/lib/s3/uploadFromServer";

// サーバーコンテキスト (API ルート/Action) 内
const url = await uploadFromServer({
  file: base64String, // ファイルコンテンツを base64 として
  path: "uploads/users/avatar.jpg", // バケット内の宛先パス
  contentType: "image/jpeg" // MIME タイプ
});

環境設定

.env.local に必要な AWS 認証情報があることを確認してください。

AWS_ACCESS_KEY_ID="your-access-key"
AWS_SECRET_ACCESS_KEY="your-secret-key"
AWS_REGION="us-east-1"
AWS_S3_BUCKET_NAME="your-bucket-name"

API ルートの例 (署名付き URL 用)

通常、クライアントアップローダー用に署名付き URL を生成するための API ルートが必要です。

// src/app/api/app/upload-input-images/route.ts
import { createPresignedPost } from "@aws-sdk/s3-presigned-post";
import { S3Client } from "@aws-sdk/client-s3";
import { v4 as uuidv4 } from "uuid";

export async function POST(request: Request) {
  const { fileName, fileType } = await request.json();
  const client = new S3Client({ region: process.env.AWS_REGION });

  const { url, fields } = await createPresignedPost(client, {
    Bucket: process.env.AWS_S3_BUCKET_NAME!,
    Key: `uploads/${uuidv4()}-${fileName}`,
    Conditions: [
      ["content-length-range", 0, 10485760], // 最大 10 MB
      ["starts-with", "$Content-Type", fileType],
    ],
    Fields: {
      acl: "public-read",
      "Content-Type": fileType,
    },
    Expires: 600, // 署名付きポストが期限切れになるまでの秒数。デフォルトでは 3600。
  });

  return Response.json({ url, fields });
}

詳細については、reference.md を参照してください。

📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

S3 Upload Handler Skill

This skill provides methods to handle file uploads to AWS S3 using pre-built UI components, custom client-side logic, or server-side processing.

Capabilities

  1. UI Component: Ready-to-use S3Uploader for drag-and-drop or button uploads.
  2. Client SDK: ClientS3Uploader class for custom upload interfaces.
  3. Server Utilities: uploadFromServer for backend file processing and uploading.

Usage Patterns

1. Standard UI Component (Recommended)

Use the S3Uploader component for most user-facing upload needs.

import { S3Uploader } from "@/components/ui/s3-uploader/s3-uploader";

// Usage in a form or page
<S3Uploader
  presignedRouteProvider="/api/app/your-upload-route" // API route to get signed URL
  variant="dropzone" // or "button"
  maxFiles={5}
  accept="image/*" // or specific extensions like ".pdf,.doc"
  onUpload={async (fileUrls) => {
    console.log("Files uploaded:", fileUrls);
    // Handle success (e.g., update form state)
  }}
/>

2. Custom Client-Side Upload

Use ClientS3Uploader when you need full control over the UI (e.g., hidden inputs, custom buttons).

import { ClientS3Uploader } from "@/lib/s3/clientS3Uploader";

// Initialize
const uploader = new ClientS3Uploader({
  presignedRouteProvider: "/api/app/your-upload-route"
});

// Upload a file
const url = await uploader.uploadFile(fileObject);

3. Server-Side Upload

Use uploadFromServer in API routes or Server Actions for processing files (resizing, generating PDFs) before storage.

import uploadFromServer from "@/lib/s3/uploadFromServer";

// In a server context (API route/Action)
const url = await uploadFromServer({
  file: base64String, // File content as base64
  path: "uploads/users/avatar.jpg", // Destination path in bucket
  contentType: "image/jpeg" // MIME type
});

Environment Configuration

Ensure .env.local has the necessary AWS credentials:

AWS_ACCESS_KEY_ID="your-access-key"
AWS_SECRET_ACCESS_KEY="your-secret-key"
AWS_REGION="us-east-1"
AWS_S3_BUCKET_NAME="your-bucket-name"

API Route Example (for Presigned URLs)

You typically need an API route to generate presigned URLs for the client uploader.

// src/app/api/app/upload-input-images/route.ts
import { createPresignedPost } from "@aws-sdk/s3-presigned-post";
import { S3Client } from "@aws-sdk/client-s3";
import { v4 as uuidv4 } from "uuid";

export async function POST(request: Request) {
  const { fileName, fileType } = await request.json();
  const client = new S3Client({ region: process.env.AWS_REGION });

  const { url, fields } = await createPresignedPost(client, {
    Bucket: process.env.AWS_S3_BUCKET_NAME!,
    Key: `uploads/${uuidv4()}-${fileName}`,
    Conditions: [
      ["content-length-range", 0, 10485760], // up to 10 MB
      ["starts-with", "$Content-Type", fileType],
    ],
    Fields: {
      acl: "public-read",
      "Content-Type": fileType,
    },
    Expires: 600, // Seconds before the presigned post expires. 3600 by default.
  });

  return Response.json({ url, fields });
}

Refer to reference.md for more details.