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是条漫长的路,吾将上下而求索,有距,无惧。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逸鹏说道

Email系列(QQ邮箱 + 含附件的邮箱案例 + 项目实战)上

平台之大势何人能挡? 带着你的Net飞奔吧! http://www.cnblogs.com/dunitian/p/4822808.html 邮箱系列:https...

3055
来自专栏菩提树下的杨过

利用fluorineFx将DataTable从.Net传递到Flash

FluorineFx自带的示例都不错,就是有点不简洁,下面的代码基本上已经最简版了(环境vs2010) 1、先创建一个Web Application,然后添加F...

2355
来自专栏张善友的专栏

RESTful WCF

相较 WCF、WebService 使用 SOAP、WSDL、WS-* 而言,几乎所有的语言和网络平台都支持 HTTP 请求。我们无需去实现复杂的客户端代理,无...

19110
来自专栏游戏杂谈

Unity项目中文字的统一管理

一款游戏在研发初期就需要考虑多语言的问题,否则后期在进行多国语言版本时就面临着巨大的成本。鉴于之前页游的经验,其它同事设计出读取Excel的方式来管理所有的文字...

1101
来自专栏菩提树下的杨过

asp.net与asp的session共享 及 asp的请求拦截

asp.net 与 asp 的session是无法直接共享的(底层的处理dll也不一样),要想互通session,只能用变通的办法: 一、asp.net -> ...

2467
来自专栏逸鹏说道

C#通过WMI的wind32 的API函数实现msinfo32的本地和远程计算机的系统日志查看功能

先不说如何实现,先来看看效果图: ? 读取远程的需要提供下远程的计算用户名和密码即可。 如何实现这个代码功能,请看如下代码部分: #region//获取日志文件...

3385
来自专栏C#

C#的网络适配器操作

     网络的相关设置在项目开发中有较多的应用,有时候需要在项目中对网络信息进行相关设置。      现在提供提供几种相关的辅助方法类。 (1).IP地址 ...

1957
来自专栏阿炬.NET

登陆后设置cookie的方法

3387
来自专栏林德熙的博客

win10 uwp 读取保存WriteableBitmap 、BitmapImage 保存 WriteableBitmap 到文件从文件读 WriteableBitmapIma

我们在UWP,经常使用的图片,数据结构就是 BitmapImage 和 WriteableBitmap。关于 BitmapImage 和 WriteableBi...

1071
来自专栏技术之路

lock小记

都快把lock忘了用wcf 给手持设备做服务的时候可能会有并发操作但又忘了lock的使用情况 做个小例子,怕自己再忘了 不加lock的时候 结果可能 是负的下面...

1926

扫码关注云+社区