Bạn Tìm Gì Hôm Nay ...?
Tất cả đều có chỉ trong 1 nốt nhạc !
Nếu cần hỗ trợ chi tiết gọi 1900 9477
Tài liệu này cung cấp tổng quan nhanh về các hoạt động WebDAV được hỗ trợ trong Cloud Drive30s, để mọi thứ dễ đọc, tài liệu này sẽ không đi sâu vào nhiều chi tiết cho từng hoạt động, bạn có thể tìm thêm thông tin cho từng hoạt động trong RFC tương ứng nếu có.
Url cơ sở cho tất cả các hoạt động WebDAV cho phiên bản Cloud Drive30s là /remote.php/webdav
.
Để lấy URL chính xác bạn cần đăng nhập vào link web Cloud Drive30s (ví dụ: https://clouddrive30s.superdata.vn/) sau đó nhấn vào Settings (góc trái bên dưới màn hình sau khi đăng nhập) khi đó sẽ hiển thị link WebDAV
Tất cả các yêu cầu cần cung cấp thông tin xác thực, dưới dạng tiêu đề xác thực cơ bản hoặc bằng cách chuyển một tập hợp cookie phiên hợp lệ.
Nếu cài đặt Cloud Drive30s của bạn sử dụng nhà cung cấp xác thực bên ngoài (chẳng hạn như máy chủ OIDC), bạn có thể phải tạo mật khẩu ứng dụng. Để làm điều đó, hãy đi tới cài đặt bảo mật cá nhân của bạn và tạo một cài đặt. Nó sẽ cung cấp tên người dùng và mật khẩu mà bạn có thể sử dụng trong tiêu đề Xác thực cơ bản.
Tất cả các yêu cầu WebDAV có thể được kiểm tra dễ dàng curl
bằng cách chỉ định phương thức yêu cầu ( GET
, PROPFIND
, PUT
…) và cung cấp nội dung yêu cầu khi cần.
Ví dụ: bạn có thể thực hiện PROPFIND
yêu cầu tìm tệp trong thư mục bằng cách sử dụng:
curl 'https://cloud.example.com/remote.php/dav/files/username/folder' \
--user username:password \
--request PROPFIND \
--data '<?xml version="1.0" encoding="UTF-8"?>
<d:propfind xmlns:d="DAV:" xmlns:oc="http://owncloud.org/ns" xmlns:nc="http://nextcloud.org/ns">
<d:prop>
<d:getlastmodified/>
<d:getcontentlength/>
<d:getcontenttype/>
<oc:permissions/>
<d:resourcetype/>
<d:getetag/>
</d:prop>
</d:propfind>'
Đây là mẫu mã JavaScript để giúp bạn bắt đầu:
import { createClient } from 'webdav'
import { generateRemoteUrl } from '@nextcloud/router'
import { getCurrentUser } from '@nextcloud/auth'
const client = createClient(generateRemoteUrl('dav'))
const response = await client.getDirectoryContents(`/files/${getCurrentUser()?.uid}/folder`, {
details: true,
data: `<?xml version="1.0" encoding="UTF-8"?>
<d:propfind xmlns:d="DAV:" xmlns:oc="http://owncloud.org/ns" xmlns:nc="http://nextcloud.org/ns">
<d:prop>
<d:getlastmodified/>
<d:getcontentlength/>
<d:getcontenttype/>
<oc:permissions/>
<d:resourcetype/>
<d:getetag/>
</d:prop>
</d:propfind>`,
})
Theo mặc định, một PROPFIND
yêu cầu sẽ chỉ trả về một số lượng nhỏ thuộc tính cho mỗi tệp: ngày sửa đổi lần cuối, kích thước tệp, cho dù đó là thư mục, etag và loại mime.
Bạn có thể yêu cầu các thuộc tính bổ sung bằng cách gửi nội dung yêu cầu kèm theo PROPFIND
yêu cầu liệt kê tất cả các thuộc tính được yêu cầu.
<?xml version="1.0"?>
<d:propfind xmlns:d="DAV:" xmlns:oc="http://owncloud.org/ns" xmlns:nc="http://nextcloud.org/ns">
<d:prop>
<d:getlastmodified />
<d:getetag />
<d:getcontenttype />
<d:resourcetype />
<oc:fileid />
<oc:permissions />
<oc:size />
<d:getcontentlength />
<nc:has-preview />
<oc:favorite />
<oc:comments-unread />
<oc:owner-display-name />
<oc:share-types />
<nc:contained-folder-count />
<nc:contained-file-count />
</d:prop>
</d:propfind>
Khi xây dựng nội dung yêu cầu DAV, bạn sẽ yêu cầu các thuộc tính có sẵn trong URI không gian tên cụ thể. Thông thường người ta khai báo tiền tố cho các vùng tên đó trong d:propfind
phần tử của phần thân.
Đây là danh sách các không gian tên có sẵn:
URI | Prefix |
---|---|
DAV: | d |
http://owncloud.org/ns | oc |
http://nextcloud.org/ns | nc |
http://open-collaboration-services.org/ns | ocs |
http://open-cloud-mesh.org/ns | ocm |
Và đây là giao diện của nó trong yêu cầu DAV của bạn:
<?xml version="1.0"?>
<d:propfind
xmlns:d="DAV:"
xmlns:oc="http://owncloud.org/ns"
xmlns:nc="http://nextcloud.org/ns"
xmlns:ocs="http://open-collaboration-services.org/ns">
xmlns:ocm="http://open-cloud-mesh.org/ns">
...
Thuộc tính | Mô tả | Ví dụ |
---|---|---|
<d:creationdate /> | The creation date of the node. | 1970-01-01T00:00:00+00:00 |
<d:getlastmodified /> | The latest modification time. | Wed, 20 Jul 2022 05:12:23 GMT |
<d:getetag /> | The file’s etag. | "6436d084d4805" |
<d:getcontenttype /> | The mime type of the file. | image/jpeg |
<d:resourcetype /> | Specifies the nature of the resource. | <d:collection /> for a folder |
<d:getcontentlength /> | The size if it is a file in bytes. | 3030237 |
<d:getcontentlanguage /> | The language of the content. | en |
<d:displayname /> | A name suitable for presentation. | File name |
<d:lockdiscovery /> |
Dummy endpoint for class 2 WebDAV support.
Should return the list of lock, but
always return an empty response.
|
<d:lockdiscovery /> |
<d:supportedlock /> |
Dummy endpoint for class 2 WebDAV support.
Always provide the same lock capabilities.
|
<d:lockentry> <d:lockscope><d:exclusive /></d:lockscope> <d:locktype><d:write /></d:locktype></d:lockentry> </d:lockentry> <d:lockentry> <d:lockscope><d:shared /></d:lockscope> <d:locktype><d:write /></d:locktype> </d:lockentry> |
<oc:id /> |
The fileid namespaced by the instance id.
Globally unique.
|
00000007oc9l3j5ur4db |
<oc:fileid /> | The unique id for the file within the instance. | 7 |
<oc:downloadURL /> |
A URL to directly download the file from a
storage. No storage implements that yet.
|
|
<oc:permissions /> |
The permissions that the user has over the
file. The value is a string containing
letters for all available permissions.
|
S : SharedR : ShareableM : MountedG : ReadableD : DeletableNV : Updateable, Renameable, MoveableW : Updateable (file)CK : Creatable |
<nc:creation_time /> | Same as creationdate , but as a timestamp. |
1675789581 |
<nc:mount-type /> | The type of mount. |
'' = local'shared' = received share'group' = group folder'external' = external storage'external-session' = external storage |
<nc:is-encrypted /> | Whether the folder is end-to-end encrypted. |
0 for false 1 for true |
<oc:tags /> | List of user specified tags. | <oc:tag>test</oc:tag> |
<oc:favorite /> | The favorite state. |
0 for not favourited1 for favourited |
<oc:comments-href /> | The DAV endpoint to fetch the comments. | /remote.php/dav/comments/files/{fileId} |
<oc:comments-count /> | The number of comments. | 2 |
<oc:comments-unread /> | The number of unread comments. | 0 |
<oc:owner-id /> | The user id of the owner of a shared file. | alice |
<oc:owner-display-name /> | The display name of the owner of a shared file. | Alice |
<oc:share-types /> | XML array of share types. |
<oc:share-type>{shareTypeId}</oc:share-type> 0 = User1 = Group3 = Public link4 = Email6 = Federated cloud share7 = Circle8 = Guest9 = Remote group10 = Talk conversation12 = Deck15 = Science mesh |
<ocs:share-permissions /> |
The permissions that the
user has over the share.
|
1 = Read2 = Update4 = Create8 = Delete16 = Share31 = All |
<ocm:share-permissions /> |
The permissions that the user has
over the share as a JSON array.
|
["share", "read", "write"] |
<nc:share-attributes /> | User set attributes as a JSON array. | [{ "scope" => <string>, "key" => <string>, "enabled" => <bool> }] |
<nc:sharees /> | The list of share recipient. |
<nc:sharee> <nc:id>alice</nc:id> <nc:display-name>Alice</nc:display-name> <nc:type>0</nc:type> </nc:sharee> |
<oc:checksums /> | An array of checksums. | <oc:checksum>md5:04c36b75222cd9fd47f2607333029106</oc:checksum> |
<nc:has-preview /> | Whether a preview of the file is available. | true or false |
<oc:size /> |
Unlike
getcontentlength , this propertyalso works for folders, reporting the size of
everything in the folder. Size is in bytes.
|
127815235 |
<oc:quota-used-bytes /> | Amount of bytes used in the folder. | 3950773 |
<oc:quota-available-bytes /> | Amount of available bytes in the folder. |
3950773 -1 Uncomputed free space.-2 Unknown free space.-3 Unlimited free space. |
<nc:rich-workspace-file /> | The id of the workspace file. | 3456 |
<nc:rich-workspace /> | The content of the workspace file. | |
<nc:upload_time /> | Date this file was uploaded. | 1675789581 |
<nc:note /> | Share note. | |
<nc:contained-folder-count /> |
The number of folders directly contained
in the folder (not recursively).
|
|
<nc:contained-file-count /> |
The number of files directly contained
in the folder (not recursively).
|
|
<nc:data-fingerprint /> |
Used by the clients to find out
if a backup has been restored.
|
|
<nc:acl-enabled> | Whether ACL is enabled for this group folder. | 1 or 0 |
<nc:acl-can-manage> | Wether the current user can manager ACL. | 1 or 0 |
<nc:acl-list> | Array of ACL rules. |
<nc:acl> <nc:acl-mapping-type>group</nc:acl-mapping-type> <nc:acl-mapping-id>admin</nc:acl-mapping-id> <nc:acl-mapping-display-name>admin</nc:acl-mapping-display-name> <nc:acl-mask>20</nc:acl-mask> <nc:acl-permissions>15</nc:acl-permissions> </nc:acl> |
<nc:inherited-acl-list> | Array of ACL rules from the parents folders | See <nc:acl-list> |
<nc:group-folder-id> | Numerical id of that group folder. | 1 |
<nc:lock> | Wether the file is locked. | 1 or 0 |
<nc:lock-owner-type> | Type of the owner of the lock. | 0 = User 1 = Office or Text 2 = WebDAV |
<nc:lock-owner> | User id of the owner of the lock. | alice |
<nc:lock-owner-displayname> | Display name of the owner of the lock. | Alice |
<nc:lock-owner-editor> | App id of an app owned lock. | |
<nc:lock-time> | Date when the lock was created as a timestamp. | 1675789581 |
<nc:lock-timeout> | TTL of the lock in seconds staring from the creation time. | 0 = No timeout |
<nc:lock-token> | The token of the lock. | files_lock/0e53dfb6-61b4-46f0-b38e-d9a428292998 |
<nc:file-metadata-size> | The pixel-size of an image. | {"width":451,"height":529} |
<nc:file-metadata-gps> | The GPS location of a file taken from EXIF data. | {"latitude":52.52093727702034,"longitude":13.397258069518614} |
Nội dung của một thư mục có thể được liệt kê bằng cách gửi PROPFIND
yêu cầu đến thư mục đó.
PROPFIND remote.php/dav/files/user/path/to/folder
Bạn có thể yêu cầu các thuộc tính của thư mục mà không cần lấy nội dung thư mục bằng cách thêm tiêu đề vào yêu cầu.Depth: 0
Có thể tải xuống tệp bằng cách gửi GET
yêu cầu tới url WebDAV của tệp.
GET remote.php/dav/files/user/path/to/file
Một tệp có thể được tải lên bằng cách gửi PUT
yêu cầu tới tệp và gửi nội dung tệp thô làm nội dung yêu cầu.
PUT remote.php/dav/files/user/path/to/file
Mọi tập tin hiện có sẽ bị ghi đè bởi yêu cầu.
Một thư mục có thể được tạo bằng cách gửi MKCOL
yêu cầu đến thư mục đó.
MKCOL remote.php/dav/files/user/path/to/new/folder
Một tập tin hoặc thư mục có thể bị xóa bằng cách gửi DELETE
yêu cầu tới tập tin hoặc thư mục đó.
DELETE remote.php/dav/files/user/path/to/file
Khi xóa một thư mục, nội dung của nó sẽ bị xóa đệ quy.
Có thể di chuyển tệp hoặc thư mục bằng cách gửi MOVE
yêu cầu tới tệp hoặc thư mục và chỉ định đích trong Destination
tiêu đề là url đầy đủ.
MOVE remote.php/dav/files/user/path/to/file
Destination: https://cloud.example/remote.php/dav/files/user/new/location
Hành vi ghi đè của thao tác di chuyển có thể được kiểm soát bằng cách đặt phần Overwrite
đầu thành T
hoặc F
để bật hoặc tắt ghi đè tương ứng.
Có thể sao chép tệp hoặc thư mục bằng cách gửi COPY
yêu cầu tới tệp hoặc thư mục đó và chỉ định đích trong Destination
tiêu đề là url đầy đủ.
COPY remote.php/dav/files/user/path/to/file
Destination: https://cloud.example/remote.php/dav/files/user/new/location
Hành vi ghi đè của bản sao có thể được kiểm soát bằng cách đặt phần Overwrite
đầu thành T
hoặc F
để bật hoặc tắt ghi đè tương ứng.
Một tệp hoặc thư mục có thể được đánh dấu là yêu thích bằng cách gửi PROPPATCH
yêu cầu đến tệp hoặc thư mục đó và đặt oc-favorite
thuộc tính
PROPPATCH remote.php/dav/files/user/path/to/file
<?xml version="1.0"?>
<d:propertyupdate xmlns:d="DAV:" xmlns:oc="http://owncloud.org/ns">
<d:set>
<d:prop>
<oc:favorite>1</oc:favorite>
</d:prop>
</d:set>
</d:propertyupdate>
Đặt oc:favorite
thuộc tính để 1
đánh dấu một tệp là yêu thích, đặt thuộc tính đó để 0
bỏ đánh dấu tệp đó là yêu thích.
Có thể truy xuất mục yêu thích của người dùng bằng cách gửi REPORT
yêu cầu và chỉ định oc:favorite
làm bộ lọc
REPORT remote.php/dav/files/user/path/to/folder
<?xml version="1.0"?>
<oc:filter-files xmlns:d="DAV:" xmlns:oc="http://owncloud.org/ns" xmlns:nc="http://nextcloud.org/ns">
<oc:filter-rules>
<oc:favorite>1</oc:favorite>
</oc:filter-rules>
</oc:filter-files>
Các thuộc tính tệp có thể được yêu cầu bằng cách thêm một <d:prop/>
phần tử vào yêu cầu liệt kê các thuộc tính được yêu cầu theo cách tương tự như cách thực hiện cho một PROPFIND
yêu cầu.
Khi liệt kê các mục yêu thích, yêu cầu sẽ tìm đệ quy tất cả các mục yêu thích trong thư mục, tất cả các mục yêu thích của người dùng có thể được tìm thấy bằng cách gửi yêu cầu tớiremote.php/dav/files/user
Bạn có thể đặt một số tiêu đề đặc biệt mà Cloud Drive30s sẽ diễn giải.
Header | Mô tả | Ví dụ |
---|---|---|
X-OC-MTime |
Cho phép chỉ định thời gian sửa đổi.
Phản hồi sẽ chứa tiêu đề
X-OC-MTime: accepted nếu mtime được chấp nhận.
|
1675789581 |
X-OC-CTime |
Cho phép chỉ định thời gian tạo.
Phản hồi sẽ chứa tiêu đề
X-OC-CTime: accepted nếu mtime được chấp nhận.
|
1675789581 |
OC-Checksum |
Checksum sẽ được lưu trữ trong DB.
Máy chủ sẽ không thực hiện bất kỳ loại xác nhận nào.
|
md5:04c36b75222cd9fd47f2607333029106 |
X-Hash |
Cho phép yêu cầu hàm băm của tệp từ máy chủ.
Máy chủ sẽ trả về hàm băm trong tiêu đề có tên:
X-Hash-MD5 , X-Hash-SHA1 , or X-Hash-SHA256 . |
md5 , sha1 , or sha256 |
OC-Chunked | Chỉ định rằng dữ liệu đã gửi là một phần của tải lên từng đoạn | true |
OC-Total-Length |
Chứa tổng kích thước của tệp trong quá trình tải lên từng đoạn.Điều này cho phép máy chủ hủy bỏ nhanh hơn nếu phần còn lại hạn ngạch của người dùng là không đủ
|
4052412 |
Header | Mô tả | Ví dụ |
---|---|---|
OC-Etag |
Khi tạo, di chuyển và sao chép,
phản hồi chứa etag của tập tin.
|
"50ef2eba7b74aa84feff013efee2a5ef" |
OC-FileId |
Khi tạo, di chuyển và sao chép,
phản hồi chứa fileid của tập tin.
|
Định dạng:
<padded-id><instance-id> .Ví dụ:
00000259oczn5x60nrdu |
Bạn có thể tham khảo thêm các bài viết hướng dẫn sử dụng Cloud Drive30s tại link https://kb.pavietnam.vn/category/giai-phap/cloud-drive