使用客户端上传文件到sharepoint站点时,我们一般会查找到使用copy webservice 的copyintoitems方法,这个方法不仅可以上传文件,也可以一并将自定义字段信息更新上去!
我很迅速的实现了上传功能,其实调用这个方法也非常简单
string[] destinationUrls = { desfile }; var count = copy.CopyIntoItems(desfile , destinationUrls, info, fileData, out copyResults);
但客户提出要求如果多次上传,需要覆盖已经存在的文件,相信你和我一样找了很久很久……使用这个方法发现无法实现覆盖功能!查了很多资料也无法了解通过什么设置或者指定一个overwirte的参数来实现覆盖上传。然后通过细读 http://social.technet.microsoft.com/Forums/zh-CN/sharepointdevelopment/thread/ca1b0312-c6d9-4ceb-a1dd-6909b458157b 后发现,如果将CopyIntoItems的第一个参数和第二参数设置不同则可以实现覆盖。第二个参数是文件上传的路径,当然不能修改。那么第一个参数是什么呢?不知道,可悲的是也从来没去了解过这个参数是做什么的。我们随便给第一个参数指定一个guid的字符串,测试上传,发现可以进行覆盖上传。可以覆盖文件,也可以覆盖自定义字段信息。
通过这样一个问题解决过程发现:
- 其实出现问题,如果从方法本身去入手往往是正确的方向,比如深入了解CopyIntoItems方法的服务端实现就会很快发现第一个参数与第二个参数之间的关系。
- 其次是上述英文网址看过几次,但看过问题问的过于初级就没看过答案,再同事看过并提醒后发现该问题的答案也就是我的答案,还是自大惹的祸。
下一篇整理一下sharepoint上传文件的3类方法,并封装一个易用的上传、下载、删除的sharepoint远程操作库