我正在使用米尔顿,我的上传代码如下:
@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客户端,并可以成功上传文件
问题是Mac Finder发送了创建新文件的首次请求,而无需任何字节
之后 - 呼叫锁(DAV 1级别不可用,这就是为什么服务器和MAC响应不良的原因,请停止上传文件。此方法仅适用于DAV 2级,因此您必须获得Milton的企业许可才能使其正常工作
锁定对象查找器上传文件
之后 - 调用解锁方法
因此,如果您想在米尔顿使用Mac Finder作为WebDav,则有几个选择:
-
获取试用企业许可证并查看此示例:https://github.com/miltonio/milton2/tree/master/master/examples/milton-anno-anno-ref
-
WebDav Specs
自己实现这些方法 模拟它 - 从Miltonfilter延伸或在示例中查看Myownservlet和Metherservlet和Method 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); }
我已经检查了以上链接中在考试中使用的此代码:myownservlet服务的web.xml方法,通过实现空安全管理器,将控制器软件包设置为扫描" com.mycompany"
P.S。为了构建示例项目,我将米尔顿客户端依赖性从pom.xml文件