搜索

PythonReactSEOPDF
GitHub Skill

file-storage

ファイルアップロード、S3、ファイルシステム操作を扱う際に使用。

TakumiOkayasu☆ 0 仓库 Stars0 仓库 Forks

安装与使用

请根据来源仓库和你的 AI 工具说明安装此技能。先阅读技能文件和依赖要求,再添加到工作流。

查看来源 ↗使用指南

技能说明

File & Storage

📋 実行前チェック(必須)

このスキルを使うべきか?
  • ファイルアップロードを実装する?
  • S3連携を行う?
  • ファイル検証処理を実装する?
  • 署名付きURLを生成する?
前提条件
  • 許可するファイルタイプを定義したか?
  • ファイルサイズ上限を決定したか?
  • 保存先を決定したか?(ローカル/S3等)
禁止事項の確認
  • ユーザー入力のファイル名をそのまま使おうとしていないか?
  • 拡張子だけでファイルタイプを判断しようとしていないか?
  • サイズ制限なしでアップロードを許可しようとしていないか?
  • 機密ファイルをパブリックにしようとしていないか?

トリガー

  • ファイルアップロード実装時
  • S3連携時
  • ファイル検証処理時
  • 署名付きURL生成時

🚨 鉄則

ユーザーアップロードは信用しない。検証必須。


アップロード検証

// ⚠️ 必須チェック
const ALLOWED_TYPES = ['image/jpeg', 'image/png', 'image/webp'];
const MAX_SIZE = 5 * 1024 * 1024; // 5MB

function validateUpload(file: File) {
  // MIMEタイプ(⚠️ 拡張子だけで判断しない)
  if (!ALLOWED_TYPES.includes(file.mimetype)) {
    throw new Error('Invalid file type');
  }
  
  // サイズ
  if (file.size > MAX_SIZE) {
    throw new Error('File too large');
  }
  
  // ファイル名サニタイズ
  const safeName = sanitizeFilename(file.originalname);
}

S3署名付きURL

import { getSignedUrl } from '@aws-sdk/s3-request-presigner';

const url = await getSignedUrl(s3Client, new GetObjectCommand({
  Bucket: 'my-bucket',
  Key: 'file.pdf'
}), { expiresIn: 3600 }); // 1時間

🚫 禁止事項まとめ

  • ユーザー入力ファイル名のそのまま使用
  • 拡張子だけでのファイルタイプ判断
  • サイズ制限なしのアップロード
  • 機密ファイルのパブリック公開

使用示例

查看来源仓库中的使用示例与配置说明。

查看来源 ↗

来源历史

收录时间
2026-01-20
索引更新时间
2026-01-26
Branch
main

收录与同步日期属于本站记录。源码修改历史请查看来源仓库。

GitHub ↗

chat Comments (0)

chat_bubble_outline

No comments yet. Be the first to share your thoughts!