Skip to content

Add bulk upload and delete functionality#49

Draft
ianrohde wants to merge 4 commits intomasterfrom
bulk-upload-and-delete
Draft

Add bulk upload and delete functionality#49
ianrohde wants to merge 4 commits intomasterfrom
bulk-upload-and-delete

Conversation

@ianrohde
Copy link

Summary

  • Bulk upload: New /bulk-upload/* route with multi-file <input> that processes each file through the existing Uploader pipeline with unified streaming progress
  • File & directory deletion: Two-step confirmation flow (GET shows confirmation page, POST executes) that deletes from both source and live S3 buckets with cache busting
  • S3 service: New delete and all_keys_under methods, with stubs for dev/testing
  • Browse/view updates: Delete links on files and directories in browse view, delete link in view page, bulk upload link in browse header

All new routes enforce the static/ prefix. Existing upload, edit, and browse functionality is untouched.

QA

  • Dev mode (launch-dev with S3 stubbed): all new routes load without errors
  • /bulk-upload/static/ renders multi-file form, processes multiple files through pipeline
  • /upload/static/ still works identically (single file upload unchanged)
  • /browse/static/ shows bulk upload link, delete links on files and directories
  • /view/static/... shows "Delete this image" link
  • /delete/static/... shows confirmation page, POST deletes file from both buckets
  • /delete-dir/static/.../ lists affected files, POST deletes all from both buckets
  • JavaScript confirm() dialog fires before deletion
  • Cancel link on delete confirmation returns to browse
  • Attempting to delete outside static/ prefix returns 400

🤖 Generated with Claude Code

ianrohde and others added 4 commits March 18, 2026 11:34
Adds delete_object support for removing S3 objects and a helper to
list all keys under a prefix (for directory deletion). Stubs both
in S3Stubbed for dev/testing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds DeleteSpec value object, factory, Deleter action, and a two-step
confirmation view. Supports single file and directory deletion from
both source and live buckets with cache busting.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
BulkUploader iterates over multiple UploadSpecs, delegating each to
the existing Uploader with a shared output stream for unified progress.
Adds from_form_params_bulk to UploadSpecFactory.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds routes for bulk-upload, delete, delete-dir, and their handlers.
Updates browse view with bulk upload and delete links, view with a
delete link, and upload form with conditional bulk mode.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@ianrohde
Copy link
Author

I'm not able to boot this in dev. I'm seeing Aws::Errors::MissingCredentialsError at /browse/static/.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant