Crowi

添付ファイル

ページにファイルや画像を添付する

Crowi では、各ページにファイルを添付できます。スクリーンショット、PDF、 ログファイルなど、ページの本文と一緒に残しておきたい資料をアップロード しておく用途を想定しています。

添付できる場所

添付ファイルは 既存のページにひもづけて 保存されます。ページを 開いたときの本文フッターに「添付ファイル」セクションが表示され、 そのページに紐づく添付ファイルが一覧されます。

Note: 添付ファイルは「先にページがあること」が前提です。新しいページに 添付したい場合は、先にページを作成・保存してから添付してください。

ファイルを添付する

ページのフッターにある添付ファイルセクションからファイルを選択して アップロードします。アップロードが完了すると、その場で一覧に追加され、 誰がいつアップロードしたかが記録されます。

アップロードしたファイルは、運用者が設定したストレージ (ローカルディスク / S3 など) に保存されます。保存先については ストレージ設定 を参照してください。

アップロードできるファイルの種類

ページへの添付は、次の 3 つの経路のどれを使っても 同じ基準 で 受け付けるかどうかが判定されます。

  • ページフッターの「添付ファイル」セクションからのアップロード
  • エディタへの 貼り付け (paste)
  • エディタへの ドラッグ&ドロップ

許可される主な種類は次のとおりです。

分類
画像PNG / JPEG / GIF / WebP / SVG / BMP / AVIF / APNG / ICO
文書 / テキストPDF、プレーンテキスト、Markdown、CSV、JSON、XML、HTML
オフィス文書Word (.doc / .docx)、Excel (.xls / .xlsx)、PowerPoint (.ppt / .pptx)
アーカイブzip、gzip、tar
音声 / 動画MP3、WAV、MP4、WebM、QuickTime (.mov)
種別不明ブラウザが Content-Type を送らなかった場合 (application/octet-stream) も許可されます

この許可リストにない種類のファイルをアップロードしようとすると拒否され、 Files of type <MIME タイプ> cannot be uploaded. という同じ文言のエラーに なります。拒否される基準・メッセージの文言はどの経路でも共通です。

Note: この許可リストが判定するのは「保存してよいか」だけです。添付を 直接開いたときにブラウザ内へ表示するか、ダウンロードになるかは、下の 「直接開いたときの表示」で説明する別の基準で決まります。オフィス文書や アーカイブは、直接開くと基本的にダウンロードになります。

添付ファイルのグリッド表示

ページフッターの「添付ファイル」セクションは、添付を 統一された タイルグリッド で表示します。画像 (PNG / JPEG / GIF / WebP など) は画像のサムネイル、それ以外のファイルはファイル種別アイコンと ファイル名を縦に並べたタイルとして描画されます。アイコンは PDF / zip / テキスト / Word / Excel / PowerPoint などファイル形式に 応じて変わり、対応表にない未知の MIME タイプでも汎用アイコンに フォールバックするため表示が壊れることはありません。

  • タイルをクリックすると、ページ内で モーダルプレビュー が 開きます (画面遷移はしません)。
  • モーダルの中には「元ファイルを開く」リンクがあり、新しいタブで 無劣化の original ファイル を開けます (後述のとおり、画像は 一覧・本文中では表示用に最適化された版が使われますが、この リンクは常に original を指します)。
  • 一覧に出るのは、ページの 最新リビジョン で参照されている 添付だけです。それ以外の添付は、下部の「すべての添付ファイルを 見る」リンクから後述の専用ページで確認できます。

各添付ファイルには /api/attachments/<id> という URL が割り当てられ、 この URL にアクセスすると実ファイルが配信されます。

直接開いたときの表示

添付の URL を直接開いたとき、ブラウザ内に表示されるか、ダウンロードになるかは ファイルの種別で決まります。判定はアップロード時の申告ではなくサーバ側の 許可リストで行われるため、すでに保存済みの添付にも同じ規則が適用されます。

ファイルの種別挙動
PNG / JPEG / GIF / WebP / BMP / AVIF / APNG / ICOブラウザ内にインライン表示
SVG (image/svg+xml)インライン表示 (後述のサンドボックス付き)
PDF (application/pdf)ブラウザの PDF ビューアでインライン表示
text/plain / text/markdown / text/csvプレーンテキストとしてインライン表示
上記以外すべてapplication/octet-stream に置き換えてダウンロード (Content-Disposition: attachment)

許可リストにない種別は、たとえば HTML ファイルでも、ブラウザが描画することは なくダウンロードになります。SVG のようにスクリプトを持てる形式は、インライン 表示されてもスクリプトは動きません。

本文の画像記法や <img> で SVG を埋め込んだときの表示は変わりません。挙動が 変わるのは SVG を直接開いたときだけです。Mermaid や PlantUML の図は本文へ直接 描画されるため無関係です。

配信時のレスポンスヘッダと、リバースプロキシを置く場合の注意は デプロイ構成 を参照してください。

画像の表示用最適化

画像 (JPEG / PNG / WebP の静止画) をアップロードすると、元ファイルの 保存に続けて表示用に最適化された派生ファイル (最大幅 1728px・メタデータ 除去済み) がベストエフォートで生成されます。/api/attachments/<id> は、この最適化済みバイト列が利用可能であればそれを優先して返します —— ページ本文の埋め込み画像・添付ファイルグリッドのサムネイル・ エディタプレビューは、いずれも同じ URL をそのまま参照しているため、 コード側の変更なしに自動的に軽量な表示用バイト列を受け取ります。

  • SVG・GIF (静止/アニメ問わず)・アニメーション WebP/APNG・1728px 以下 の画像は最適化の対象外で、そのまま original が配信されます (拡大や 複製はされません)。
  • 派生ファイルの生成に失敗しても original 側は無事なので、アップロード 自体が失敗することはありません。失敗した場合はそのファイルについて original が配信され続けます。
  • 派生ファイルはあくまで表示用のベストエフォートなキャッシュであり、 original の Exif / GPS などのメタデータは無変更のまま保持されます。 メタデータが除去されるのは派生ファイル側だけです。

ページ本文に埋め込んだ画像を右クリックして「名前を付けて画像を保存」 すると、この最適化済みバイト列が保存されます (original ではありません)。 無劣化の original が欲しい場合は、添付詳細モーダルの「元ファイルを開く」 リンク、または /api/attachments/<id>/original を直接開いてください。

Tip: 添付ファイルの配信にはページの閲覧権限が適用されます。 添付の URL を知っていても、そのページを閲覧できないユーザーには ファイルが配信されません (存在を隠すため 404 が返ります)。 /original にも同じページ閲覧チェックが適用されますが、それに加えて canonical URL にはない要件が1つ追加されます — attachments:read スコープも必須で、このスコープを持たないトークンは canonical な 配信 URL は取得できても /original は取得できません。

「すべての添付ファイル」ページ

/_attachments?pageId=<id> を開くと、そのページの添付ファイル 専用一覧が表示されます。一覧は次の 2 セクションに分かれます。

  • 最新リビジョンで使われている添付 — 現在のページ本文から 実際に参照されているファイル。
  • 過去リビジョンでのみ使われている添付 — 最新リビジョンから 参照されなくなったが、過去の履歴では引き続き参照されている (もしくは編集で孤立した) ファイル。

ページフッターに出てこない添付を確認・整理したいときに使います。

本文中の画像

Markdown 本文の中で画像を表示したい場合は、添付ファイルの URL を 画像記法で参照します。

![スクリーンショット](/api/attachments/64f0a1b2c3d4e5f6a7b8c9d0)

URL を手書きする以外に、後述の 貼り付け (paste)ドラッグ&ドロップ でエディタへ直接アップロードすると、画像記法が 本文へ自動挿入されます。

Note: 貼り付け / ドラッグ&ドロップで挿入される画像記法は、既定では 常に属性なしのプレーンな ![ファイル名](url) です。サイズ・整列・ 回り込みを指定したい場合は、挿入後に手動で {width= height= align= float=} の属性ブロックを追加してください(記法の詳細は Markdown 記法 の「画像の表示属性」を参照)。 エディタで画像記法にカーソルを合わせる(またはホバーする)と、 width / align / float を操作できるツールチップも使えます。

エディタへ直接アップロードする

ページ編集画面 (/_edit?page_id=<ページID>) では、ファイルをエディタへ 貼り付け または ドラッグ&ドロップ することでアップロードできます。 アップロードした添付ファイルは編集中のページに紐づき、Markdown 記法が カーソル位置へ自動挿入されます。

Note: この機能は編集画面のエディタ内でのみ動作します。ページ フッターの添付ファイルセクションからのアップロードは従来どおり利用 できます。

ファイルを貼り付ける (paste)

スクリーンショットや他アプリからコピーした画像、ファイルマネージャから コピーしたファイルをエディタへ貼り付けると、自動でアップロードされます。

  • 画像は ![ファイル名](url)、それ以外のファイルは [ファイル名](url) の記法で挿入されます(ドラッグ&ドロップと同じ画像/リンクの使い分けです)。
  • 貼り付けた画像はファイル名を持たないため、pasted-<タイムスタンプ>.<拡張子> (例: pasted-1717891234.png)として自動生成されます。ファイルマネージャから コピーしたファイルは元のファイル名がそのまま使われます。
  • アップロード中はカーソル位置に ![Uploading pasted-1717891234.png (37%)…](#) というプレースホルダが挿入され、進捗のパーセンテージがその場で更新 されます。共同編集中の他メンバーにもこの進捗が見えます。
  • アップロードが完了すると、プレースホルダが ![pasted-1717891234.png](/api/attachments/...) に置き換わります。
  • 同じ画像を 2 回貼り付けると添付も 2 件作成されます(クライアント側で 重複排除はしません)。不要な場合は添付ファイル一覧から削除してください。
  • 1 ファイルのサイズ上限は既定で 50 MB です (運用者が下げている場合があります)。

貼り付けで受け付けるファイル種別は、上の「アップロードできるファイルの 種類」で説明した 統一された許可リストと同じもの です — ファイル マネージャからコピーした .docx や HTML ファイルも、添付ボタンや ドラッグ&ドロップと同じようにアップロードされます。許可リストにない 種類を貼り付けると、他の経路と同じ Files of type <MIME タイプ> cannot be uploaded. というトースト通知が表示されます。

画像として埋め込むかリンクとして貼るかは、この許可リストとは独立に ファイルが画像かどうかだけ で決まります(画像のみ ![…](…) になります)。

Tip: コピーした テキスト(HTML の書式情報を持つリッチテキストを 含む)はファイルではないため、アップロードではなくテキストとして 貼り付けられます。テキストや単独の URL を貼り付けたときの挙動に ついては Markdown 記法 を参照してください。URL の 貼り付けは自動でリンク記法に変換されます。

ファイルをドラッグ&ドロップする

エディタ領域へファイルをドラッグすると、ドロップ先がハイライト表示され、 ドロップした時点でカーソル位置へアップロードが始まります。

  • 画像は ![ファイル名](url)、それ以外のファイルは [ファイル名](url) の記法で挿入されます。
  • 進捗プレースホルダの挙動は貼り付けと共通です。
  • 複数ファイルを一度にドロップした場合は、OS が報告した順に 直列で 処理され、ファイルごとにプレースホルダが挿入されます。
  • 1 ファイルあたりの上限は既定で 50 MB (運用者が下げている場合があります)、 1 回の操作で扱えるのは 5 ファイル までです。超過した場合はトースト通知で 知らせます。

ドラッグ&ドロップで受け付けるファイル種別は、上の「アップロードできる ファイルの種類」で説明した 統一された許可リストと同じもの です (画像 / PDF・テキスト系 / Word・Excel・PowerPoint などのオフィス文書 / アーカイブ / 音声・動画)。許可リストの内容は固定で、インスタンスごとに 変更する設定はありません。

許可リストにない種類をドロップすると、Files of type <MIME タイプ> cannot be uploaded. というトースト通知が表示されます。これはサーバ側 (添付 ボタン / paste) が返すエラーメッセージと同じ言い回しで、どの経路で拒否 されても同じ文言になります。

Note: application/octet-stream (種別不明) はこの許可リストに 含まれているため受け付けます。OS が MIME タイプを一切報告しない (空文字になる) ケースも、サーバと同じ正規化によってこの種別不明として 扱われるため、同じく受け付けます。ただし保存される種別は application/octet-stream のままとは限りません — 種別不明のまま 届いたファイルは、サーバがファイル名の拡張子から種別を補います (上記「直接開いたときの表示」参照)。

Note: 編集画面が 読み取り専用モード(同時編集者の上限到達、 または編集権限がない場合 — リアルタイム共同編集 参照)のときは、ドラッグ&ドロップは無効になり、権限がない旨の トーストが表示されます。

アップロードに失敗したとき

ネットワーク切断や権限エラーなどでアップロードが失敗すると、挿入されて いた進捗プレースホルダは 本文から取り除かれ、失敗の理由がトースト 通知で表示されます。壊れた Markdown が本文に残ることはないため、 そのまま貼り付け / ドロップをやり直せます。

添付ファイルを削除する

削除は 詳細モーダル の中から実行します — タイル側にはインラインの 削除ボタンはありません。タイルをクリックしてモーダルを開き、そこから 削除してください。削除すると、ストレージ上の実ファイルも あわせて削除されます。

削除できるのは そのページを閲覧できるユーザー です。ページ本文と同じく 添付ファイルもチームで共同編集する対象という扱いで、アップロードした本人や 管理者に限定されてはいません。

ページの公開範囲 (grant) のチェックはそのまま効くので、閲覧できないページの 添付を削除することはできません (存在を隠すため 404 が返ります)。

旧 URL との互換性

Crowi 1.x の /files/:id 形式の URL は現在の配信 URL へリダイレクトされるため、 過去のページを書き換える必要はありません。

ページを完全削除したとき

ページをゴミ箱から完全削除すると、そのページに紐づく添付ファイルも ストレージ上の実体ごとまとめて削除されます。詳しくは ゴミ箱 を参照してください。

関連ページ

On this page