Sharepoint 将大文件上载到WSS v3

Sharepoint 将大文件上载到WSS v3,sharepoint,upload,wss-3.0,large-files,Sharepoint,Upload,Wss 3.0,Large Files,我构建了一个WSSv3应用程序,它可以上传小块文件;当每个数据块到达时,出于性能原因,我暂时将其保存在SQL2005图像数据类型字段中** 上传结束时出现问题;我需要通过WSSv3对象模型将数据从SQL Server移动到Sharepoint文档库 现在,我可以想到两种方法: SPFileCollection.Add(string, (byte[])reader[0]); // OutOfMemoryException 及 是否有其他方法可以成功完成此任务 **性能原因:如果您试图直接在Shar

我构建了一个WSSv3应用程序,它可以上传小块文件;当每个数据块到达时,出于性能原因,我暂时将其保存在SQL2005图像数据类型字段中**

上传结束时出现问题;我需要通过WSSv3对象模型将数据从SQL Server移动到Sharepoint文档库

现在,我可以想到两种方法:

SPFileCollection.Add(string, (byte[])reader[0]); // OutOfMemoryException

是否有其他方法可以成功完成此任务


**性能原因:如果您试图直接在Sharepoint上写入每个块,您会注意到随着文件的增长(>100Mb)性能会下降。

我要说的第一件事是Sharepoint确实不是为此而设计的。它将所有文件存储在自己的数据库中,因此这些大型文件都将存储在数据库中。这不是一个好主意,原因很多:可扩展性、成本、备份/恢复、性能等等。。。因此,我强烈建议使用文件共享

您可以通过更改的executionTimeout属性来增加web请求的超时


除此之外,我不知道还有什么好建议。我从未听说过在SharePoint中存储如此大的文件。如果你一定要这么做,试着问一下。

我想说的第一件事是,SharePoint真的,真的不是为此而设计的。它将所有文件存储在自己的数据库中,因此这些大型文件都将存储在数据库中。这不是一个好主意,原因很多:可扩展性、成本、备份/恢复、性能等等。。。因此,我强烈建议使用文件共享

您可以通过更改的executionTimeout属性来增加web请求的超时


除此之外,我不知道还有什么好建议。我从未听说过在SharePoint中存储如此大的文件。如果您确实必须这样做,请尝试继续询问。

如前所述,在Sharepoint中存储大型文件通常是个坏主意。有关更多信息,请参阅本文:

话虽如此,BLOB可以使用外部存储,这可能会也可能不会有助于解决性能问题--Microsoft发布了一个半完整的外部BLOB存储提供程序来解决这个问题,但不幸的是,它在服务器场级别工作,并影响所有上载。哎呀

幸运的是,由于您可以实现自己的外部BLOB提供程序,因此您可以编写一些东西来更好地处理这些特定文件。有关详细信息,请参阅本文:


这样做是否值得,取决于您遇到的问题有多严重。:)

如前所述,在Sharepoint中存储大型文件通常是个坏主意。有关更多信息,请参阅本文:

话虽如此,BLOB可以使用外部存储,这可能会也可能不会有助于解决性能问题--Microsoft发布了一个半完整的外部BLOB存储提供程序来解决这个问题,但不幸的是,它在服务器场级别工作,并影响所有上载。哎呀

幸运的是,由于您可以实现自己的外部BLOB提供程序,因此您可以编写一些东西来更好地处理这些特定文件。有关详细信息,请参阅本文:


这样做是否值得,取决于您遇到的问题有多严重。:)

我以以下代码结束:


myFolder.Files.Add("filename", 
   new DataRecordStream(dataReader, 
      dataReader.GetOrdinal("Content"), length));
你可以找到。它基本上是一个从
DbDataRecord
.GetBytes
读取数据的流

这种方法类似于
OpenBinaryStream()/SaveBinary(stream)
,但它并不在传输数据时将所有字节[]保留在内存中。在某些情况下,
DataRecordStream
将使用64k块从
Microsoft.SharePoint.SPFile.CloneStreamToSPFileStream
访问


感谢大家提供宝贵的信息

我以以下代码结束:


myFolder.Files.Add("filename", 
   new DataRecordStream(dataReader, 
      dataReader.GetOrdinal("Content"), length));
你可以找到。它基本上是一个从
DbDataRecord
.GetBytes
读取数据的流

这种方法类似于
OpenBinaryStream()/SaveBinary(stream)
,但它并不在传输数据时将所有字节[]保留在内存中。在某些情况下,
DataRecordStream
将使用64k块从
Microsoft.SharePoint.SPFile.CloneStreamToSPFileStream
访问


感谢大家提供宝贵的信息

文件的平均大小和最大大小是多少?大多数文件小于5MB;大文件(~500MB)只是一个小集合,文件的平均大小和最大大小是多少?大多数文件小于5MB;大文件(~500MB)只是一个小sethi Alex,谢谢你的评论。我知道这些问题:我正在构建一个wss应用程序来替换网络共享(主要用于带宽限制);虽然用户应该将此应用程序用于小文件,但必须考虑大文件。我对HttpRuntime没有任何问题,因为我上传了几个文件,谢谢你的评论。我知道这些问题:我正在构建一个wss应用程序来替换网络共享(主要用于带宽限制);虽然用户应该将此应用程序用于小文件,但必须考虑大文件。我对HttpRuntime没有任何问题,因为我将文件分为几个部分上传到安装链接Brett,我会仔细研究它们;现在我必须这样完成这个应用程序;谢谢你time@Brett:有一家公司已经为SharePoint开发了完整的外部存储解决方案。我现在记不起名字也找不到了。。。看起来很有趣有趣的链接Brett,我会仔细研究的;现在我必须这样完成这个应用程序;谢谢你time@Brett:有一家公司已经为SharePoint开发了完整的外部存储解决方案。我现在记不起名字也找不到了。。。看起来很有趣