写了个 webdav 客户端插件,支持常用文件操作
資深大佬 : flyzero 0
webdav_client
- https://pub.dev/packages/webdav_client
- 使用 dio 作为 http 网络请求库,主要是方便后续的断点续传功能扩展
##主要功能
- support
Basic/Digestauthentication - common settings
- read dir
- make dir
- delete
- rename
- copy
- download file
- upload file
- cancel request
Todo
- Upload support for break uploads
- Download support for breakdowns
Usage
First of all you should create client instance using newClient() function:
var client = webdav.newClient( 'http://localhost:6688/', user: 'flyzero', password: '123456', debug: true, );
Common settings
// Set the public request headers client.setHeaders({'accept-charset': 'utf-8'}); // Set the connection server timeout time in milliseconds. client.setConnectTimeout(8000); // Set send data timeout time in milliseconds. client.setSendTimeout(8000); // Set transfer data time in milliseconds. client.setReceiveTimeout(8000); // Test whether the service can connect try { await client.ping(); } catch (e) { print('$e'); }
Read all files in a folder
var list = await client.readDir('/'); list.forEach((f) { print('${f.name} ${f.path}'); }); // can sub folder var list2 = await client.readDir('/sub/sub/folder'); list2.forEach((f) { print('${f.name} ${f.path}'); });
Create folder
await client.mkdir('/新建文件夹'); // Recursively create folders await client.mkdirAll('/new folder/new folder2');
Remove a folder or file
If you remove the folder, some webdav services require a ‘/’ at the end of the path.
// Delete folder await client.remove('/new folder/new folder2/'); // Delete file await client.remove('/new folder/新建文本文档.txt');
Rename a folder or file
If you rename the folder, some webdav services require a ‘/’ at the end of the path.
// Rename folder await client.rename('/新建文件夹 /', '/新建文件夹 2/', true); // Rename file await client.rename('/新建文件夹 2/test.dart', '/新建文件夹 2/test2.dart', true);
Copy a file / folder from A to B
If copied the folder (A > B), it will copy all the contents of folder A to folder B.
Some webdav services have been tested and found to delete the original contents of the B folder!!!
// Copy all the contents of folderA to folder B await client.copy('/folder/folderA/', '/folder/folderB/', true); // Copy file await client.copy('/folder/aa.png', '/folder/bb.png', true);
Download file
// download bytes await client.read('/folder/folder/openvpn.exe'); // download 2 local file await client.read2File( '/folder/vpn.exe', 'C:/Users/xxx/vpn2.exe');
Upload file
// upload local file 2 remote file await client.writeFromFile( 'C:/Users/xxx/vpn.exe', '/f/vpn2.exe');
Cancel request
CancelToken cancel = CancelToken(); // Supports most methods client.mkdir('/新建文件夹', cancel) .catchError((err) { prints(err.toString()); }); // in other cancel.cancel('reason')
大佬有話說 (0)