SharePoint下用C#代碼上傳文檔至文檔庫的子文件夾中


SharePoint的文檔庫非常方便,可以管理日常的文檔,更強大的是可以創建文件夾來分類,通常在UI界面上是非常簡單了,點擊文件夾,Create a Folder即可。但是,怎樣手動去創建文件夾呢,怎樣在文件夾中創建子文件夾。

項目分析

  • 舉個栗子,我需要上傳文檔到文檔庫,希望把該文件上傳到以年、月、日、上傳人命名的子文件夾中,如:2013年-->5月-->11日-->陳小春,如下圖所示這樣

  • 點擊2013年,進入當前月子文件夾

  • 點擊當前月,進入以上傳人命名的子文件夾

  • 點擊上傳人(陳小春),即可看到我們上傳的文檔

代碼實現

  • 首先我們完成對參數的設置,初始化參數
            //獲取年度參數
            string folderYearParameter = DateTime.Now.Year.ToString() + "";
            //獲取月度參數
            string folderMonthParameter = DateTime.Now.Month.ToString() + "";
            //獲取當前登錄用戶名:
            string currentLoginName = SPContext.Current.Web.CurrentUser.LoginName;
            currentLoginName = currentLoginName.Substring(currentLoginName.LastIndexOf("\\") + 1);

            string currentUserDisplayName;
            //獲得Display name
            //當Administrator上傳有問題 ?因為 當administrator登陸時 DisplayName=Wllgwh\administrator,invalid Path
            SPUser spUser = SPContext.Current.Web.AllUsers[SPContext.Current.Web.CurrentUser.LoginName];
            currentUserDisplayName = spUser.Name;
            if (currentUserDisplayName.Contains("\\"))
            {
                currentUserDisplayName = currentUserDisplayName.Substring(currentUserDisplayName.LastIndexOf("\\")+1);   
            }
  • 提權

創建文件夾之前,判斷是否存在該文件夾,若不存在,則創建之。之后創建Byte數組,將上傳的文檔附加到SubFolder中。

           SPSecurity.RunWithElevatedPrivileges(delegate()
            {

                var homeUrl = SPContext.Current.Site.Url;
                SPSite site = new SPSite(homeUrl + "/jxkp");
                SPWeb web = site.OpenWeb();
                //獲取List
                SPList list = web.Lists.TryGetList("績效考評");
                SPFolder folderYear =
                list.ParentWeb.GetFolder(list.RootFolder.ServerRelativeUrl + "/" + folderYearParameter);

                if (!folderYear.Exists)
                {
                    SPListItem folder = list.Items.Add(list.RootFolder.ServerRelativeUrl, SPFileSystemObjectType.Folder, folderYearParameter);
                    web.AllowUnsafeUpdates = true;
                    folder.Update();
                    web.AllowUnsafeUpdates = false;
                }

                //判斷folderMonth是否存在,不存在則創建
                SPFolder folderMon = list.ParentWeb.GetFolder(list.RootFolder.ServerRelativeUrl + "/" + folderYearParameter + "/" + folderMonthParameter);
                if (!folderMon.Exists)
                {
                    //創建子文件夾

                    SPListItem subFolder = list.AddItem(list.RootFolder.ServerRelativeUrl, SPFileSystemObjectType.Folder, folderYearParameter + "/" + folderMonthParameter);
                    web.AllowUnsafeUpdates = true;
                    subFolder.Update();
                    web.AllowUnsafeUpdates = false;
                }

                //判斷CurrentlyUser是否存在,不存在則創建,這么長的一串,之后重構
                SPFolder folderCurrUser = list.ParentWeb.GetFolder(list.RootFolder.ServerRelativeUrl + "/" + folderYearParameter + "/" + folderMonthParameter + "/" + currentUserDisplayName);
                if (!folderCurrUser.Exists)
                {
                    SPListItem userFolder = list.AddItem(list.RootFolder.ServerRelativeUrl, SPFileSystemObjectType.Folder, folderYearParameter + "/" + folderMonthParameter + "/" + currentUserDisplayName);
                    web.AllowUnsafeUpdates = true;
                    userFolder.Update();
                    web.AllowUnsafeUpdates = false;
                }                          

                if (fileUploadJxkp.PostedFile != null)
                {
                    if (fileUploadJxkp.PostedFile.ContentLength > 0)
                    {
                        System.IO.Stream stream = fileUploadJxkp.PostedFile.InputStream;
                        byte[] bytFile = new byte[Convert.ToInt32(fileUploadJxkp.PostedFile.ContentLength)];
                        stream.Read(bytFile, 0, Convert.ToInt32(fileUploadJxkp.PostedFile.ContentLength));
                        stream.Close();

                        SPFolder subSPFolder =
                       list.ParentWeb.GetFolder(list.RootFolder.ServerRelativeUrl + "/" + folderYearParameter + "/" +
                                                 folderMonthParameter + "/" + currentUserDisplayName);
                        web.AllowUnsafeUpdates = true;
                        subSPFolder.Files.Add(System.IO.Path.GetFileName(fileUploadJxkp.PostedFile.FileName),
                                              bytFile, true);
                        web.AllowUnsafeUpdates = false;
                       // labMsg.Text = "績效考評已上傳成功";
                        string successScript = string.Format("$.jnotify('{0}');", "上傳成功");
                        ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "smManager", successScript, true);
                    }
                }
            });

小結

SharePoint的文檔庫歸根到底還是List,學習SharePoint是條漫長的路,吾將上下而求索,有距,無懼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM