@PutChild 在 Mac Finder 中使用 milton webdav 上传文件失败

@PutChild Upload file with milton webdav in Mac Finder failed

我用的是milton,上传代码如下:

@PutChild 
@Transactional 
public FileContentItem uploadFile(FolderContentItem parent, String name, byte[] bytes){
 String traceId = UuidGenUtil.createUuid();
 try { 
     QUERY_LOGGER.info("[uploadFile][NetdiskController],action=Request, name={}, size={},traceId={}",name,bytes.length,traceId);

在windows中,我可以成功上传文件,但是在MacFinder中,字节长度总是0,错误如下:

The Finder can't complete the operation because some data in "Shot.png" can't be read or written (Error code -36)

有人知道为什么吗?谢谢

更新:我在 mac 中尝试了 ForkLift webdav 客户端并且可以成功上传文件

问题是 mac finder 发送第一个没有任何字节的创建新文件的请求

之后 - 调用 LOCK,这对 Dav Level 1 不可用,这就是为什么服务器响应不佳并且 mac 停止上传文件的原因。此方法仅适用于 Dav level 2,因此您必须获得 milton 的企业许可证才能使用

Locking object Finder 上传文件后

之后 - 调用 UNLOCK 方法

所以,如果您想在米尔顿中使用 mac webdav 查找器,您有多种选择:

  1. 获取试用企业许可证并查看此示例:https://github.com/miltonio/milton2/tree/master/examples/milton-anno-ref

  2. 通过webdav specs自己实现这些方法

  3. 模拟它 - 从 MiltonFilter 扩展或查看示例中的 MyOwnServlet 并在方法 doFilter/service 中编写如下内容:

    //mock method, do not use it in production!
    HttpServletRequest request = (HttpServletRequest)req;
    HttpServletResponse response = (HttpServletResponse) resp;
    if(request.getMethod().equals("LOCK")){
        response.setStatus(200);
        response.addHeader("Lock-Token", "<opaquelocktoken:e71d4fae-5dec-22d6-fea5-00a0c91e6be4>");
    } else if(request.getMethod().equals("UNLOCK")){
        response.setStatus(204);
    }else {
        doMiltonProcessing((HttpServletRequest) req, (HttpServletResponse) resp);
    }
    

我已经通过上面的 link 检查了这段代码在示例中的工作情况:在 MyOwnServlet 服务的 web.xml 方法中创建,通过实现空安全管理器禁用 init 中的身份验证,设置要扫描的控制器包"com.mycompany"

p.s。要构建示例项目,我必须从 pom.xml 文件

中删除 milton 客户端依赖项