using Microsoft.SharePoint; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using System.Web; namespace _20150928 { class Program { static void Main(string[] args) { //Console.WriteLine(HttpUtility.HtmlDecode("<div class="ExternalClass261ED404956E49D289332C8D5DE50427"><p><a href="/sites/00/0001/SiteAssets/Lists/Dialogue/AllItems/TCALProjectList.xlsx"><img width="16" height="16" class="ms-asset-icon ms-rtePosition-4" src="/_layouts/15/images/icxlsx.png" alt="" />TCALProjectList.xlsx</a></p></div>")); ////string str = "http://baidu.com.cn/hello%20I%27am a apple/te%27st.txt"; ////Console.WriteLine(str.Length); //Console.ReadKey(); string mainSite = ConfigurationManager.AppSettings["SiteUrl"]; string siteUrl = mainSite + "sites/" + "te" + "/" + "test" + "/"; string listName = "test"; string folderServerRelativeUrl = "/test/test/"; SPFolder folder = CreateFolderInList(siteUrl, listName, folderServerRelativeUrl); folder = GetSubFolderNewSystem(folder, "test"); SPFolder folderNew = folder; string strURL = "";//web service get data string fileName = ""; Stream stream = DownLoadAttachment(strURL); if (stream != null) { MigrationFromFileToFile(folderNew, fileName, stream); } string bodystring = "<a href=" + folderNew.Url.Remove(0, mainSite.Length) + fileName + " ><img src=" + "/_layouts/15/images/icxlsx.png" + " />" + fileName + "</a>"; } public static SPFolder CreateFolderInList(string siteUrl, string listName, string folderServerRelativeUrl) { SPFolder returnFolder = null; using (SPSite site = new SPSite(siteUrl)) using (SPWeb web = site.OpenWeb()) { SPList list = web.Lists[listName]; SPFolder folder = list.RootFolder; string[] folderNames = folderServerRelativeUrl.Split('/'); foreach (string folderName in folderNames) { if (!string.IsNullOrEmpty(folderName)) { bool exitFolder = false; if (folder.SubFolders.Count > 0) { foreach (SPFolder subFolder in folder.SubFolders) { if (subFolder.Name.Equals(folderName)) { exitFolder = true; folder = subFolder; break; } } } if (!exitFolder) { //フォルダー作成 folder.SubFolders.Add(folderName); folder = folder.SubFolders[folderName]; } } } returnFolder = folder; } return returnFolder; } public static SPFolder GetSubFolderNewSystem(SPFolder parentFolder, string folderName) { SPFolder subFolder = null; try { subFolder = parentFolder.SubFolders[folderName]; if (!subFolder.Exists) { parentFolder.SubFolders.Add(folderName); subFolder = parentFolder.SubFolders[folderName]; } } catch { parentFolder.SubFolders.Add(folderName); subFolder = parentFolder.SubFolders[folderName]; } return subFolder; } public static Stream DownLoadAttachment(string strURL) { Stream stream; try { WebClient myWebClient = new WebClient(); myWebClient.Credentials = new NetworkCredential(ConfigurationManager.AppSettings["OldUserName"], ConfigurationManager.AppSettings["OldUserPassword"], ConfigurationManager.AppSettings["OldDomain"]); byte[] pagedata = myWebClient.DownloadData(strURL); stream = new MemoryStream(pagedata); myWebClient.Dispose(); return stream; } catch (Exception ex) { return null; } } public static void MigrationFromFileToFile(SPFolder folderNew, string fileName, Stream stream) { SPFile subFileNew = null; byte[] contents = StreamToBytes(stream); if (contents != null) { subFileNew = folderNew.Files.Add(folderNew.Url + "/" + fileName, contents, true); } } public static byte[] StreamToBytes(System.IO.Stream stream) { int maxsize = Int32.Parse(ConfigurationManager.AppSettings["maxSize"].ToString()); using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) { byte[] bytes = new byte[maxsize]; int read; while ((read = stream.Read(bytes, 0, bytes.Length)) > 0) { ms.Write(bytes, 0, read); if (ms.ToArray().Length > maxsize) { return null; } } return ms.ToArray(); } } } }