coverl 发表于 2015-9-26 09:37:31

【转】SharePoint 中利用WebService 进行文件操作的类

  using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using System.IO;
using System.Data;
using System.Xml;


public class SPFiles : System.Web.Services.WebService
{
    public SPFiles()
    {
  //Uncomment the following line if using designed components
      //InitializeComponent();
    }
    /// <summary>
    /// File checkin
    /// </summary>
    /// <param name="fileUrl">file url</param>
    /// <param name="comments">check in comments</param>
   
    public void CheckIn(string fileUrl, string comments)
    {
      SPFile file = GetFile(fileUrl);
  file.CheckIn(comments);
    }
  /// <summary>
    /// Get file check out status
    /// </summary>
    /// <param name="fileUrl">file url</param>
    /// <returns></returns>
   
    public string GetCheckOutStatus(string fileUrl)
    {
      SPFile file = GetFile(fileUrl);
      return file.CheckOutStatus.ToString();
    }
    /// <summary>
    /// file check out
    /// </summary>
    /// <param name="fileUrl">file url</param>
    /// <returns></returns>   
   
    public byte[] CheckOut(string fileUrl)
    {
      SPFile file = GetFile(fileUrl);
      file.CheckOut();
      return file.OpenBinary();
    }
    /// <summary>
    /// file undocheck out
    /// </summary>
    /// <param name="fileUrl">file url</param>
   
    public void UndoCheckout(string fileUrl)
    {
      SPFile file = GetFile(fileUrl);
      file.UndoCheckOut();
    }
    /// <summary>
    /// upload file without create new folder
    /// </summary>
    /// <param name="fileName">filename</param>
    /// <param name="fileContents">file content</param>
    /// <param name="targetFolder">where the doc upload</param>
    /// <returns></returns>
   
    public string UploadDocument(string fileName, byte[] fileContents, string targetFolder)
    {
      if (fileContents == null)
      {
            return "Null Attachment";
      }
      try
      {
            EnsureParentFolder(targetWebSite(targetFolder), targetFolder);
            SPFolder folder = targetWebSite(targetFolder).GetFolder(targetFolder);
            
            SPFile newFile = folder.Files.Add(fileName, fileContents);
            return newFile.Title + " created " + newFile.TimeCreated.ToLongDateString();
      }
      catch (System.Exception ee)
      {
            return ee.Message + ee.Source;
      }
    }
    /// <summary>
    /// upload file
    /// </summary>
    /// <param name="docName">filename</param>
    /// <param name="fileContents">file contents</param>
    /// <param name="destUrl">where the file upload</param>
    /// <returns></returns>
   
    public string UploadDoc(string docName, byte[] fileContents, string destUrl)
    {
      if (fileContents == null)
      {
            return "Null Attachment";
      }
      try
      {
            EnsureParentFolder(targetWebSite(destUrl), destUrl);
            //check file exist
            SPFolder myFolder = targetWebSite(destUrl).GetFolder(destUrl);
            SPFile newFile = myFolder.Files.Add(destUrl, fileContents);
            return newFile.Title + " created " + newFile.TimeCreated.ToLongDateString();
  }
      catch (System.Exception ee)
      {
            return ee.Message + ee.Source;
      }
    }
    /// <summary>
    /// get all files and file versions in given folder
    /// </summary>
    /// <param name="folderurl">folderurl</param>
    /// <returns></returns>
    //
    //public XmlDocument FileCollection(string folderurl)
    //{
    //    DataSet ds = new DataSet();
    //    DataTable filesdt = new DataTable();
    //    DataTable versionsdt = new DataTable();
      
    //    try
    //    {
    //      SPFolder myFolder = targetWebSite(folderurl).GetFolder(folderurl);
    //      SPFileCollection myFiles = myFolder.Files;
    //      filesdt = FilesInfo(myFiles);
    //      versionsdt = VersionInfo(myFiles, folderurl);
    //      ds.Tables.Add(filesdt);
    //      ds.Tables.Add(versionsdt);
    //      ds.Relations.Add(filesdt.Columns["UniqueId"], versionsdt.Columns["UniqueId"]);
    //    }
    //    catch
    //    {
    //      return null;
    //    }
    //    return ds;
    //}
    /// <summary>
    /// Delete File
    /// </summary>
    /// <param name="folderurl">folder url</param>
    /// <param name="docname">file name</param>
    /// <returns></returns>
   
    public bool DeleteFile(string folderurl, string docname)
    {
      SPFolder myFolder = targetWebSite(folderurl).GetFolder(folderurl);
      SPFileCollection myFiles = myFolder.Files;
  for (int i = myFiles.Count - 1; i > -1; i--)
      {
            if (myFiles.Name == docname)
            {
                string delurl = myFiles.Url;
               
                  myFiles.Delete();               
            }
      }
      return true;
  }
  
    public int AddFolder(string folderUrl,string newName)
    {
      if (targetWebSite(folderUrl).Folders.Folder.Name == newName)
      {
            return -1;
      }
      else
      {
            targetWebSite(folderUrl).Folders.Add(folderUrl + "/" + newName);
            return 0;
      }
      
    }
    /// <summary>
    /// Move old folder to new folder
    /// </summary>
    /// <param name="oldfolder"></param>
    /// <param name="newfolder"></param>
   
    public void MoveTo(string oldfolder, string newfolder)
    {
      SPFolder myFolder = targetWebSite(oldfolder).GetFolder(oldfolder);
      myFolder.MoveTo(newfolder);
    }
    /// <summary>
    /// Delete folder
    /// </summary>
    /// <param name="oldfolder"></param>
   
    public void FolderDel(string oldfolder)
    {
      SPFolder myFolder = targetWebSite(oldfolder).GetFolder(oldfolder);
      myFolder.Delete();
      //SPFolderCollection spfoloder = targetWebSite().Folders;
    }
    #region Private Members
    private SPSite targetSite(string url)
    {
      SPSite site = new SPSite(url);
      return site;
    }
    private SPWeb targetWebSite(string url)
    {
      //get
      //{
      //    if (m_web == null)
      //    {
      //      m_web = SPControl.GetContextWeb(Context);
      //    }
      //    return m_web;
      //}
      SPSite site = new SPSite(url);
      SPWeb web = site.OpenWeb();
      return web;
    }
    private SPWeb m_web;
    private SPFile GetFile(string fileUrl)
    {
      SPFile file = targetWebSite(fileUrl).GetFile(fileUrl);
      if (!file.Exists)
      {
            throw new System.IO.FileNotFoundException(String.Format("File {0} not found", fileUrl));
      }
      return file;
    }
    private 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;
    }
    private DataTable VersionInfo(SPFileCollection files, string folderurl)
    {
      DataTable VersionDt = new DataTable();
      DataColumn CheckInComment = new DataColumn("CheckInComment", typeof(string));
      DataColumn Created = new DataColumn("Created", typeof(DateTime));
      DataColumn CreatedBy_Name = new DataColumn("CreatedBy_Name", typeof(string));
      DataColumn CreatedBy_ID = new DataColumn("CreatedBy_ID", typeof(int));
      DataColumn ID = new DataColumn("ID", typeof(int));
      DataColumn ServerRelativeUrl = new DataColumn("ServerRelativeUrl", typeof(string));
      DataColumn UniqueId = new DataColumn("UniqueId", typeof(string));
      DataColumn Url = new DataColumn("Url", typeof(string));
      DataColumn WebUrl = new DataColumn("WebUrl", typeof(string));
      DataColumn TargetUrl = new DataColumn("TargetUrl", typeof(string));
      VersionDt.Columns.Add(CheckInComment);
      VersionDt.Columns.Add(Created);
      VersionDt.Columns.Add(CreatedBy_Name);
      VersionDt.Columns.Add(CreatedBy_ID);
      VersionDt.Columns.Add(ID);
      VersionDt.Columns.Add(ServerRelativeUrl);
      VersionDt.Columns.Add(UniqueId);
      VersionDt.Columns.Add(Url);
      VersionDt.Columns.Add(WebUrl);
      VersionDt.Columns.Add(TargetUrl);
      foreach (SPFile file in files)
      {
            SPFileVersionCollection versions = file.Versions;
            foreach (SPFileVersion version in versions)
            {
                DataRow dr = VersionDt.NewRow();
                dr["CheckInComment"] = version.CheckInComment;
                dr["Created"] = version.Created;
                dr["CreatedBy_Name"] = version.CreatedBy.Name;
                dr["CreatedBy_ID"] = version.CreatedBy.ID;
                dr["ID"] = version.ID;
                dr["ServerRelativeUrl"] = version.File.ServerRelativeUrl;
                dr["UniqueId"] = version.File.UniqueId.ToString();
                dr["Url"] = version.Url;
                dr["WebUrl"] = targetWebSite(folderurl).Url;
                dr["TargetUrl"] = targetWebSite(folderurl).Url + "/" + version.Url;               
                VersionDt.Rows.Add(dr);
            }
      }
      return VersionDt;
    }
    private DataTable FilesInfo(SPFileCollection files)
    {
      DataTable FilesDt = new DataTable();
      DataColumn UniqueId = new DataColumn("UniqueId", typeof(string));
      DataColumn CheckInComment = new DataColumn("CheckInComment", typeof(string));
      DataColumn Name = new DataColumn("Name", typeof(string));
      DataColumn ServerRelativeUrl = new DataColumn("ServerRelativeUrl", typeof(string));
      DataColumn TimeCreated = new DataColumn("TimeCreated", typeof(DateTime));
      DataColumn TimeLastModified = new DataColumn("TimeLastModified", typeof(DateTime));
      DataColumn Title = new DataColumn("Title", typeof(string));
      DataColumn Author = new DataColumn("Author", typeof(string));
      DataColumn UIVersion = new DataColumn("UIVersion", typeof(int));
      DataColumn MajorVersion = new DataColumn("MajorVersion", typeof(int));
      DataColumn MinorVersion = new DataColumn("MinorVersion", typeof(int));
      DataColumn ModifiedBy = new DataColumn("ModifiedBy", typeof(string));
      DataColumn CheckedOutBy = new DataColumn("CheckedOutBy", typeof(int));
      DataColumn CheckedOutDate = new DataColumn("CheckedOutDate", typeof(DateTime));
      DataColumn CheckOutStatus = new DataColumn("CheckOutStatus", typeof(string));
      FilesDt.Columns.Add(UniqueId);
      FilesDt.Columns.Add(CheckInComment);
      FilesDt.Columns.Add(Name);
      FilesDt.Columns.Add(ServerRelativeUrl);
      FilesDt.Columns.Add(TimeCreated);
      FilesDt.Columns.Add(TimeLastModified);
      FilesDt.Columns.Add(Title);
      FilesDt.Columns.Add(Author);
      FilesDt.Columns.Add(UIVersion);
      FilesDt.Columns.Add(MajorVersion);
      FilesDt.Columns.Add(MinorVersion);
      FilesDt.Columns.Add(ModifiedBy);
      FilesDt.Columns.Add(CheckedOutBy);
      FilesDt.Columns.Add(CheckedOutDate);
      FilesDt.Columns.Add(CheckOutStatus);
      foreach (SPFile file in files)
      {
            DataRow dr = FilesDt.NewRow();
            dr["UniqueId"] = file.UniqueId.ToString();
            dr["CheckInComment"] = file.CheckInComment;
            dr["Name"] = file.Name;
            dr["ServerRelativeUrl"] = file.ServerRelativeUrl;
            dr["TimeCreated"] = file.TimeCreated;
            dr["TimeLastModified"] = file.TimeLastModified;
            dr["Title"] = file.Title;
            dr["Author"] = file.Author.Name;
            dr["UIVersion"] = file.UIVersion;
            dr["MajorVersion"] = file.MajorVersion;
            dr["MinorVersion"] = file.MinorVersion;
            dr["ModifiedBy"] = file.ModifiedBy.Name;
            if (file.CheckOutStatus != SPFile.SPCheckOutStatus.None)
            {
                dr["CheckedOutBy"] = file.CheckedOutBy.ID;
                dr["CheckedOutDate"] = file.CheckedOutDate;
            }
            dr["CheckOutStatus"] = file.CheckOutStatus.ToString();            
            FilesDt.Rows.Add(dr);
      }
      return FilesDt;
    }
    #endregion
  }
  
  
本文来自CSDN博客,转载请标明出处:http://blog.iyunv.com/rmak2008/archive/2008/12/16/3530715.aspx
页: [1]
查看完整版本: 【转】SharePoint 中利用WebService 进行文件操作的类