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;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
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>
    [WebMethod]
    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>
    [WebMethod]
    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>   
    [WebMethod]
    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>
    [WebMethod]
    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>
    [WebMethod]
    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>
    [WebMethod]
    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>
    //[WebMethod]
    //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>
    [WebMethod]
    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[i].Name == docname)
            {
                string delurl = myFiles[i].Url;
               
                    myFiles[delurl].Delete();               
            }
        }
        return true;

    }

    [WebMethod]
    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>
    [WebMethod]
    public void MoveTo(string oldfolder, string newfolder)
    {
        SPFolder myFolder = targetWebSite(oldfolder).GetFolder(oldfolder);
        myFolder.MoveTo(newfolder);
    }
    /// <summary>
    /// Delete folder
    /// </summary>
    /// <param name="oldfolder"></param>
    [WebMethod]
    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

}

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值