我们需要从Java / J2EE应用程序向SharePoint上载大文件(最多200 MB) .
我们知道有一些现成的SharePoint Web服务允许将文件上传到SharePoint . 但是,我们主要担心的是并发用户上传文件会发生什么 . 例如,在调用SharePoint发送该数据之前,我们需要为Java服务器(应用程序服务器)上的每个用户读取200 MB文件 . 即使有5个并发用户,所消耗的内存大约为1 GB,并且CPU使用率也可能很高 . 在这种情况下,是否有任何建议如何处理服务器内存,文件上传的并发性?
我认为一个选择可能是使用像Flash / Flex这样的技术,它们之间不需要其他服务器(Java应用服务器) - 但是,想知道如何在J2EE服务器中实现这一点?
http://servername/sitename/_vti_bin/copy.asmx
谢谢
5 回答
或采取对象
好的..所以这就是我的理解:
您正在尝试使用Sharepoint Copy Service
此服务要求流在Soap信封中进行base64编码 .
由于文件大小很大,您的SOAP请求大小变得庞大并且需要更多内存
我可以想到两个选择:
我不太了解sharepoint,如果有可能提供要上传的文件的位置而不是发送字节,那么你可以将文件ftp / sftp发送到sharepoint服务器,然后使用文件的位置调用webservice .
在Java中,而不是使用开箱即用的api for SOAP消息,编写自定义api . 当用户上传文件时,将其另存为base64编码文件 . 然后你的自定义api将创建一个soap消息并流式传输而不是将所有内容加载到内存中 .
对于选项2:尝试是否可以将文件内容作为soap附件发送 . 如果你想将它作为消息的一部分发送,它会变得有点复杂 .
试试看 . 我不确定是否有效 .
SharePoint支持用于读取/写入文件的WebDAV协议 .
您可以使用许多不需要在内存中加载完整文件的WebDAV库 .
这是解决方案
可能是我错过了一些东西......但是当你让用户将文件上传到你的J2EE服务器时,你是不是先将上传的内容写入临时目录然后再将其传输到服务器?
当您将缓冲区立即写入磁盘时,您不会遇到内存限制的任何问题 .