Feat WebDAV#131
Conversation
Draft Changelog EntryChangelog EntryWebDAV file access has been added to Cloud Storage. Users can now connect to their cloud files from desktop applications and file managers using WebDAV protocol. The WebDAV service is accessible at Files accessed through WebDAV remain stored as Frappe File documents, and all existing Frappe permissions are enforced. Files created through WebDAV are private by default. The feature works with both local file storage and S3-compatible storage configurations. When using S3 storage, downloads continue to use the existing signed URL flow with permission verification. Desktop file operations are supported, including drag and drop, folder creation, file editing, moving files between folders, and file duplication. The system handles atomic-save operations used by applications such as TextEdit on macOS and Notepad on Windows. File version history is preserved when files are edited through WebDAV. File locks are stored in Redis to ensure consistency across multiple server processes in production environments. Operating system metadata files such as Documentation for connecting from macOS, Windows, and rclone has been added to the system documentation. This changelog entry was automatically generated by the Changelog Generator Action. |
|
@lauty95 @agritheory I was able to get local storage to work on my Ubuntu setup (26.04 LTS):
I couldn't test the S3 path though since I'll need the credentials for that again, but I'll talk to you on Slack about that @agritheory. Some things that Claude flagged doing a review:
|
PR against version-15: WebDAV file access
Summary
This PR adds WebDAV access to Cloud Storage so users can work with their files from desktop tools.
The integration works with:
The main goal is to keep Frappe as the source of truth. Files are still stored as
Filedocuments, Frappe permissions are respected, files created through WebDAV are private by default, and storage can be either local or S3-compatible depending on the existing Cloud Storage configuration.Demos
1-Connect.from.Mac.mov
unknown_2026.06.05-08.41_clip_1_clip_1.mp4
3-File.Demos.mov
4-Private.mov
Local Storage Behavior
When Cloud Storage is configured to use local storage, WebDAV creates and updates Frappe
Filedocuments and writes the file content to the site's local filesystem.In this mode, S3 or any external storage service is not required. This is useful for local development, testing, and installations that do not use a remote bucket.
Editing from desktop clients also works with the atomic-save flow used by applications such as TextEdit on macOS or Notepad on Windows. The client may create temporary files and move them over the final file, while Cloud Storage keeps the correct final
Filedocument.S3-Compatible Storage Behavior
When Cloud Storage is configured with S3-compatible storage, WebDAV keeps Frappe
Filedocuments as metadata and stores the content in the bucket.Files uploaded through WebDAV use a path strategy designed to avoid conflicts during desktop operations, especially when clients create temporary files and then move them over the original file.
Downloads for S3-backed files can still be served through the existing signed URL flow, with Frappe permissions checked before granting access to the object.
Files Added Or Updated
cloud_storage/cloud_storage/webdav/renderer.py/dav/routes to WsgiDAV, handles WebDAV authentication, methods, and responses.cloud_storage/cloud_storage/webdav/provider.pyFiledocuments and folders to WebDAV resources. This is where the main WebDAV operations live: list, create, read, write, move, and delete.cloud_storage/cloud_storage/webdav/buffers.pyPUTand turns it intoFiledocuments, for both local storage and S3-compatible storage.cloud_storage/cloud_storage/webdav/paths.pycloud_storage/cloud_storage/webdav/permissions.pycloud_storage/cloud_storage/webdav/locks.pycloud_storage/cloud_storage/webdav/memory.py.DS_Storeor auxiliary files, without persisting them asFiledocuments.cloud_storage/hooks.pydocs/webdav.mddocs/hooks.mdUsage Details
Production URL:
Local URL:
Credentials: