关于wdWriteWithStream的options的问题
Opened this issue · 5 comments
我有看着在源代码中 lib/src/webdav_dio.dart中有以下代码。
Future<void> wdWriteWithStream(
Client self,
String path,
Stream<List<int>> data,
int length, {
void Function(int count, int total)? onProgress,
CancelToken? cancelToken,
}) async {
// fix auth error
var pResp = await this.wdOptions(self, path, cancelToken: cancelToken);
if (pResp.statusCode != 200) {
throw newResponseError(pResp);
}
.......
}
个人认为在上传文件时,特别是多级目录。
options 预检 服务端一般都是返回404的。此处判断!=200. 就直接异常 不太合适。
如果在wdWriteWithStream之前,自己手动调用目录的创建, 但wdWriteWithStream中又调用了一次。 多次请求浪费。
不知道大佬怎么看?
这个库其实一开始是参考golang的一个开源库写的,协议的标准我没去翻,所以有!=200的这样处理。
另一个重复请求我记得是我封装了通用方法,可能这块没注意重复请求了。
目前好久没解决bug了,其实有重构的想法(有个其他项目在开发,后面可能会用到这个库),可能到那时候会重构,或者通过ffi的方式引入更健全的其他语言库
我目前是存在,多级目录 /a/b/c/d/1.png。这种情况直接使用 是无法成功的。在服务端那边options返回404.
1 在客户端的处理方案,writeFromFile 之前,先检测目录是否已存在(这里,没有合适的方法。client,没有提供wdPropfind,需要自己去client.c.wdPropfind 或者req) 不存在则创建目录。 如果执行这个逻辑,在wdWriteWithStream中 默认有去调用_createParent。这就造成了两次创建目录请求
2 修改服务端。
2.1 我之前是打算用flutter写服务端的,但没有找到合适的库,我刚开始对webdav规范也不熟。所以只能放弃
2.2 我目前使用的是python WsgiDAV 做服务端。
2.2.1 这里也需要自定义一些东西,他不支持文件的创建时间修改。
2.2.2 自定义了 FilesystemProvider. 实现了文件创建时间的修改,另外修改了options 404.我返回了200。
虽然完成了需求,但总感觉怪怪的。
最后,期待大佬的新作品。
我当时单测用的是坚果云,你可以试试不同服务端一致性(从以往的问题来看,不同服务端的返回还是有很多差异的)