WSS3SDK之:如何从本地文件夹上传文件到SharePoint站点
本节将展示如何从本地上传一个文件到WSS站点。通过使用EnsureParentFolder方法来确保目标文件夹有效。
步骤
1、在VS 2005中创建一个Web应用程序,添加FormDigest控件,并在.aspx文件中引用Microsoft.SharePoint.WebControls命名空间,如下:
我们可以从默认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中。
3、在.aspx.cs code-beihind文件中,添加System.IO和Microsoft.SharePoint命名空间。
VB
VB
C#
此外,实例化父站点的SPWeb对象时,可以结合SPSite构造器和OpenWeb方法来验证URL是否属于当前WSS部署。不在当前WSS管辖范围内的URL将抛出参数异常。System.Web.UI.HtmlControls.HtmlInputFile对象用来读取源文件,内容存到一个byte数组中,以便传给SPFileCollection类的Add方法。
5、EnsureParentFolder方法确保了在某网站中目标URL的父文件夹确实存在,并会返回该父文件夹的网站相对URL路径。该方法接受两个参数:一个是由SPWeb对象代表的父站点,另一个是包含绝对URL路径的字符串(从UploadFile方法传过来的)。如果父文件夹不存在,EnsureParentFolder方法将创建它。
VB
如果要从本地上传一个文件到运行WSS的同一台服务器上,我们可以用System.IO.FileStream对象来代替。这时,需要添加System.IO命名空间的引用。此外,也要引用System和Microsoft.SharePoint命名空间。下面的例子在Click事件处理程序中调用UploadFile方法,它反过来再调用先前创建的EnsurePartentFolder方法。
VB
注意:
上传文件的大小不能超过2GB。
步骤
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" %>
注意: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>
<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#
Imports Microsoft.SharePoint
using System.IO;
using Microsoft.SharePoint;
4、添加下列代码到button的Click事件。using Microsoft.SharePoint;
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)
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地址。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);
此外,实例化父站点的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#
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
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方法返回目标父一级文件夹。如果该文件夹不存在,样例代码将创建该文件夹。{
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;
}
如果要从本地上传一个文件到运行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#
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
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方法。{
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);
}
注意:
上传文件的大小不能超过2GB。
分类:
SharePoint
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!