1. 程式人生 > >用WebClinet實現SharePoint上文件庫中檔案的上傳與下載

用WebClinet實現SharePoint上文件庫中檔案的上傳與下載

微軟的SharePoint 提供了強大的文件管理功能,能夠建立各種型別的文件庫,並對文件進行相應的管理。所以我們的產品也打算將檔案用SharePoint來管理,實現文件的共享訪問。於是,就產生了用客戶端程式訪問SharePoint上的文件庫來上傳下載檔案的需求。我就用C#中的WebClient類寫了一個實現SharePoint上檔案的上傳與下載的類。下面是該類的程式碼,裡面有詳細的註釋。而且,使用起來非常簡單,只要傳入相應的引數就可以實現向SharePoint上傳檔案,和從SharePoint下載檔案。由於是用WebClient實現的,所以也適用於普通網站的檔案上傳和下載,當然前提是要有相應的許可權。

using System;
using System.IO;
using System.Net;
using System.Collections.Specialized;

namespace SharePointVisitUtilities
{
    public static class SharePointFileHelper
    {
        // 上傳檔案
        // 
        // 引數
        // 上傳的檔案在SharePoint上的位置,要上傳的本地檔案的路徑名,使用者名稱,密碼,域
        public static string UploadFile(string strDestUrl, string strFilePathName, string strUserName, string strPassword, string strDomain)
        {
            string strResult = "Success";

            try
            {
                string strFileName = Path.GetFileName(strFilePathName);
                string strCopiedFilePathName = Path.GetTempPath() + strFileName;

                // 將檔案拷貝到臨時資料夾
                // 目的是可以在檔案在被開啟狀態下還可以上傳
                File.Copy(strFilePathName, strCopiedFilePathName, true);

                // 開啟拷貝到臨時目錄下的檔案
                FileStream fs = new FileStream(strCopiedFilePathName, FileMode.Open, FileAccess.Read);

                // 讀檔案
                BinaryReader br = new BinaryReader(fs);
                Byte[] filecontents = br.ReadBytes((int)fs.Length);

                br.Close();
                fs.Close();

                WebClient webclient = CreateWebClient(strUserName, strPassword, strDomain);
              
                // 上傳
                webclient.UploadData(strDestUrl + strFileName, "PUT", filecontents);
            }
            catch (Exception ex)
            {
                strResult = "Failed! " + ex.Message;
            }

            return strResult;
        }

        // 下載檔案
        // 
        // 引數
        // 下載的檔案在SharePoint上的位置,檔案下載後存放的本地資料夾路徑,使用者名稱,密碼,域
        public static string DownloadFile(string strSourceUrl, string strDestFolder, string strUserName, string strPassword, string strDomain)
        {
            string strResult = "Success";

            try
            {
                WebClient webclient = CreateWebClient(strUserName, strPassword, strDomain);

                // 下載
                Byte[] filecontents = webclient.DownloadData(strSourceUrl);

                string strFileName = Path.GetFileName(strSourceUrl);

                // 建立檔案
                FileStream fs = new FileStream(strDestFolder + strFileName, FileMode.Create, FileAccess.Write);
                // 寫檔案
                fs.Write(filecontents, 0, filecontents.Length);
                fs.Close();
            }
            catch (Exception ex)
            {
                strResult = "failed! " + ex.Message;
            }

            return strResult;
        }

        // 建立WebClient
        // 引數:使用者名稱,密碼,域(用來登陸SharePoint)
        private static WebClient CreateWebClient(string strUserName, string strPassword, string strDomain)
        {
            WebClient webclient = new WebClient();

            if (String.IsNullOrEmpty(strUserName))
            {
                webclient.UseDefaultCredentials = true;
            }
            else
            {
                NetworkCredential credential = new NetworkCredential(strUserName, strPassword, strDomain);
                webclient.Credentials = credential;
            }

            return webclient;
        }
    }
}