WSS3SDK之:如何从本地文件夹上传文件到SharePoint站点

本节将展示如何从本地上传一个文件到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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值