[方法] ローカル フォルダから SharePoint サイトにファイルをアップロードする

最終更新日: 2010年7月7日

適用対象: SharePoint Foundation 2010

SharePoint Online で使用可能

このプログラミング作業は、ローカル フォルダーから Microsoft SharePoint Foundation サイト上のフォルダーにファイルをアップロードする方法を示しています。EnsureParentFolder メソッドを使用して、アップロード先フォルダーが存在することを確認します。

手順

ローカル フォルダーから SharePoint サイト上のフォルダーにファイルをアップロードするには

  1. 「Creating Application Pages for SharePoint (英語)」で説明されているように、Microsoft Visual Studio 2010 でアプリケーション ページを作成します。

  2. HtmlInputFile コントロール、テキスト ボックス、およびボタンをフォームに、そして FormDigest コントロールをページに追加します。

    <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 分離コード ファイルで、System.IO および Microsoft.SharePoint 名前空間に対する using ディレクティブを次のように追加します。

    Imports System.IO
    Imports Microsoft.SharePoint
    
    using System.IO;
    using Microsoft.SharePoint;
    
  4. ボタンの Click イベントに次のコードを追加します。

    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)
    
    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);
    

    アップロード先のテキスト ボックスに入力する値は、ファイル名を含む絶対 URL である必要があります。絶対 URL は destUrl パラメータに割り当てられます。

    親サイト用の SPWeb オブジェクトをインスタンス化することに加え、SPSite コンストラクターと OpenWeb メソッドの併用により、URL を検証して URL が現在の SharePoint Foundation 展開によって処理されない場合は引数例外をスローします。HtmlInputFile オブジェクトを使用して、SPFileCollection クラスの Add メソッドで使用するバイト配列にアップロード元ファイルを読み込みます。

  5. EnsureParentFolder メソッドは、指定されたサイトにアップロード先 URL の親フォルダーが存在していることを確認し、親フォルダーのサイト相対 URL を返します。EnsureParentFolder メソッドは 2 つのパラメーターを受け付けます。1 つは親サイトを表す SPWeb オブジェクト、もう 1 つは例の UploadFile メソッドから渡される絶対 URL を含む文字列です。親フォルダーが存在しない場合は、EnsureParentFolder メソッドが作成します。

    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
    
    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 がサイトの適用範囲内に見つからない場合は例外をスローします。String.LastIndexOf メソッドを使用してアップロード先 URL 内におけるスラッシュ (/) の最後の出現箇所を判定することにより、親フォルダーの URL が計算されます。スラッシュがない場合 (つまり、インデックスが -1 である場合) は、アップロード先はサイトのルート フォルダーであり、parentFolderUrl パラメータは空の文字列を返します。それ以外の場合、この例では SPWeb クラスの GetFolder メソッドを使用してアップロード先親フォルダーを返します。フォルダーが存在しない場合は、作成します。

SharePoint Foundation を実行している同じサーバーのローカル フォルダーからファイルをアップロードするには、代わりに FileStream オブジェクトを使用できます。この場合は、SystemMicrosoft.SharePoint に対する using ディレクティブに加えて、System.IO 名前空間に対するディレクティブを追加します。次の例は、Click イベント ハンドラーを使用してユーザー設定 UploadFile メソッドを呼び出し、このメソッドが、前に説明した EnsureParentFolder メソッドを呼び出します。

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
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 メソッドは 2 つのパラメーターを受け付けます。srcUrl パラメーターはローカル コンピューターのファイル システムにおけるアップロード元の場所のパスを指定し、destUrl パラメーターはアップロード先の絶対 URL を指定します。FileStream オブジェクトを使用して、SPFileCollection クラスの Add メソッドで使用するバイト配列にアップロード元ファイルを読み込みます。

注意

アップロードできるファイルのサイズは 2 GB までです。

関連項目

概念

リストのオブジェクトとコレクションを操作する

Visual Studio を使用して SharePoint 開発を行う

データ更新のためのセキュリティ検証と投稿の作成

権限の昇格