@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 查找器,您有多种选择:
获取试用企业许可证并查看此示例:https://github.com/miltonio/milton2/tree/master/examples/milton-anno-ref
通过webdav specs自己实现这些方法
模拟它 - 从 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 客户端依赖项
我用的是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 查找器,您有多种选择:
获取试用企业许可证并查看此示例:https://github.com/miltonio/milton2/tree/master/examples/milton-anno-ref
通过webdav specs自己实现这些方法
模拟它 - 从 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 客户端依赖项