WSS3SDK之:如何从本地文件夹上传文件到SharePoint站点
发布日期:2021-06-29 03:55:05
浏览次数:2
分类:技术文章
本文共 5059 字,大约阅读时间需要 16 分钟。
本节将展示如何从本地上传一个文件到WSS站点。通过使用EnsureParentFolder方法来确保目标文件夹有效。
步骤 1、在VS 2005中创建一个Web应用程序,添加FormDigest控件,并在.aspx文件中引用Microsoft.SharePoint.WebControls命名空间,如下: <% @ Register Tagprefix = " SharePoint " Namespace = " Microsoft.SharePoint.WebControls " Assembly = " Microsoft.SharePoint, Version=11.0.0.0, Culture = neutral, PublicKeyToken = 71e9bce111e9429c " %>
注意:
我们可以从默认WSS部署中的default.aspx文件中获取PubliceKeyToken的值,该文件位于 Local_Drive:/Program Files/Common Files/Microsoft Shared/web server extensions/12/TEMPLATE/SiteTemplates/sts文件夹。或者从Microsoft.SharePoint组件所提供 的信息中获取,该组件位于资源管理器中的Local_Drive:/%WINDOWS%/assembly。 2、添加一个HtmlInputFile控件,一个textbox,和一个button到.aspx页面form中。 < form id ="Form1" method ="post" runat ="server" > < SharePoint:FormDigest runat ="server" /> < input id ="File1" type ="file" runat ="server" title ="upldFileBox" > < asp:Button id ="Button1" runat ="server" Text ="Upload File" ></ asp:Button > < asp:TextBox id ="TextBox1" runat ="server" ></ asp:TextBox > </ form >
3、在.aspx.cs code-beihind文件中,添加System.IO和Microsoft.SharePoint命名空间。
VB
Imports System.IO Imports Microsoft.SharePoint
C#
using System.IO; using Microsoft.SharePoint;
4、添加下列代码到button的Click事件。
VB If File1.PostedFile Is Nothing Then Return End If Dim destUrl As String = TextBox1.Text Dim site As SPWeb = New SPSite(destUrl).OpenWeb() Dim fStream As Stream = File1.PostedFile.InputStream Dim contents(fStream.Length) As Byte fStream.Read(contents, 0 , CInt (fStream.Length)) fStream.Close() EnsureParentFolder(site, destUrl) site.Files.Add(destUrl, contents)
C#
if (File1.PostedFile == null ) return ; string destUrl = TextBox1.Text; SPWeb site = new SPSite(destUrl).OpenWeb(); Stream fStream = File1.PostedFile.InputStream; byte [] contents = new byte [fStream.Length]; fStream.Read(contents, 0 , ( int )fStream.Length); fStream.Close(); EnsureParentFolder(site, destUrl); site.Files.Add(destUrl, contents);
传递给destUrl参数,也就是textbox中输入的目标位置的值必须是一个包含文件名的绝对URL地址。
此外,实例化父站点的SPWeb对象时,可以结合SPSite构造器和OpenWeb方法来验证URL是否属于当前WSS部署。不在当前WSS管辖范围内的URL将抛出参数异常。System.Web.UI.HtmlControls.HtmlInputFile对象用来读取源文件,内容存到一个byte数组中,以便传给SPFileCollection类的Add方法。 5、EnsureParentFolder方法确保了在某网站中目标URL的父文件夹确实存在,并会返回该父文件夹的网站相对URL路径。该方法接受两个参数:一个是由SPWeb对象代表的父站点,另一个是包含绝对URL路径的字符串(从UploadFile方法传过来的)。如果父文件夹不存在,EnsureParentFolder方法将创建它。 VB Public Function EnsureParentFolder(parentSite As SPWeb, destinUrl As String ) As String destinUrl = parentSite.GetFile(destinUrl).Url Dim index As Integer = destinUrl.LastIndexOf( " / " ) Dim parentFolderUrl As String = String .Empty If index > - 1 Then parentFolderUrl = destinUrl.Substring( 0 , index) Dim parentFolder As SPFolder = parentSite.GetFolder(parentFolderUrl) If Not parentFolder.Exists Then Dim currentFolder As SPFolder = parentSite.RootFolder Dim folder As String For Each folder In parentFolderUrl.Split( " / " c) currentFolder = currentFolder.SubFolders.Add(folder) Next folder End If End If Return parentFolderUrl End Function ' EnsureParentFolder
C#
public string EnsureParentFolder(SPWeb parentSite, string destinUrl) { destinUrl = parentSite.GetFile(destinUrl).Url; int index = destinUrl.LastIndexOf( " / " ); string parentFolderUrl = string .Empty; if (index > - 1 ) { parentFolderUrl = destinUrl.Substring( 0 , index); SPFolder parentFolder = parentSite.GetFolder(parentFolderUrl); if ( ! parentFolder.Exists) { SPFolder currentFolder = parentSite.RootFolder; foreach ( string folder in parentFolderUrl.Split( ' / ' )) { currentFolder = currentFolder.SubFolders.Add(folder); } } } return parentFolderUrl; }
6、SPWeb类的GetFile方法用于与SPFile类的Url属性一并将URL转换成站点相当URL,如果特定的URL在该站点区域内不存在则抛出异常。父文件夹的URL是通过String.LastIndexOf方法通过判断目标URL最末端的斜线(/)的方式计算出来的。如果没有发现斜线(换句话说index等于-1),那么目标就是站点的根文件夹,parentFolderUrl参数将返回空字符串。否则,正如样例中所示,SPWeb类的GetFolder方法返回目标父一级文件夹。如果该文件夹不存在,样例代码将创建该文件夹。
如果要从本地上传一个文件到运行WSS的同一台服务器上,我们可以用System.IO.FileStream对象来代替。这时,需要添加System.IO命名空间的引用。此外,也要引用System和Microsoft.SharePoint命名空间。下面的例子在Click事件处理程序中调用UploadFile方法,它反过来再调用先前创建的EnsurePartentFolder方法。VB
Public Sub UploadFile(srcUrl As String , destUrl As String ) If Not File.Exists(srcUrl) Then Throw New ArgumentException( String .Format( " {0} does not exist " , srcUrl), " srcUrl " ) End If Dim site As SPWeb = New SPSite(destUrl).OpenWeb() Dim fStream As FileStream = File.OpenRead(srcUrl) Dim contents(fStream.Length) As Byte fStream.Read(contents, 0 , CInt (fStream.Length)) fStream.Close() EnsureParentFolder(site, destUrl) site.Files.Add(destUrl, contents) End Sub ' UploadFile
C#
public void UploadFile( string srcUrl, string destUrl) { if ( ! File.Exists(srcUrl)) { throw new ArgumentException(String.Format( " {0} does not exist " , srcUrl), " srcUrl " ); } SPWeb site = new SPSite(destUrl).OpenWeb(); FileStream fStream = File.OpenRead(srcUrl); byte [] contents = new byte [fStream.Length]; fStream.Read(contents, 0 , ( int )fStream.Length); fStream.Close(); EnsureParentFolder(site, destUrl); site.Files.Add(destUrl, contents); }
UploadFile方法有两个参数。srcUrl参数指定了本地文件系统中的源位置,destUrl参数指定目标位置的绝对URL。System.IO.FileStream对象用于读源文件的内容,并存到byte数组中传给SPFileCollection类的Add方法。
注意: 上传文件的大小不能超过2GB。转载地址:https://blog.csdn.net/zengjibing/article/details/3815988 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月28日 19时53分21秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
allure报告的定制化
2019-04-29
怎样给excel添加一行数据
2019-04-29
怎样彻底帮妹子解决weditor的安装的问题
2019-04-29
干货|一次完整的性能测试,测试人员需要做什么?
2019-04-29
全栈性能测试修炼宝典
2019-04-29
jmeter-性能测试9-测试执行
2019-04-29
沟通交流碎碎念
2019-04-29
电信集成笔试题
2019-04-29
jmeter-性能测试8-性能测试基本过程及示例
2019-04-29
1.vue起步
2019-04-29
3.vue条件语句
2019-04-29
10.vue实战--form表单属性绑定
2019-04-29
11.vue实战--form表单字段验证提交验证
2019-04-29
12.vue实战--接口请求,组件使用,页面跳转配置
2019-04-29
打破职能之缺陷预防之路
2019-04-29
mac开启mysql,重置mysql密码,允许远程连接
2019-04-29
安装kibana
2019-04-29
linux安装nodejs
2019-04-29
tomcat部署vue,spring项目
2019-04-29
idea2020打包war包
2019-04-29