0

我正在使用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下,我可以成功上传文件,但是用Mac Finder,字节长度总是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 客户端,可以成功上传文件

4

1 回答 1

0

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

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

锁定对象查找器上传文件后

After - 调用 UNLOCK 方法

所以如果你想在 milton 中使用 mac finder for 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);
    }
    

我已经通过上面的链接检查了此代码在示例中的工作:在 web.xml 方法中由 MyOwnServlet 提供服务,通过实现空安全管理器在 init 中禁用身份验证,将控制器包设置为扫描“com.mycompany”

ps 构建示例项目我必须从 pom.xml 文件中删除 milton 客户端依赖项

于 2017-11-28T12:37:25.627 回答