|
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.Name == docname)
{
string delurl = myFiles.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
}
本文来自CSDN博客,转载请标明出处:http://blog.iyunv.com/rmak2008/archive/2008/12/16/3530715.aspx |
|
|