文档章节

SharePoint下用C#代码上传文档至文档库的子文件夹中

 木宛城主
发布于 2015/03/02 19:42
字数 573
阅读 7
收藏 0
点赞 0
评论 0

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

© 著作权归作者所有

共有 人打赏支持
粉丝 2
博文 222
码字总数 199010
作品 0
黄浦
Office 365 SharePoint 迁移浅谈 (三)使用SP Migration API迁移

下边开始进入正题,首先来谈谈如何使用SharePoint Migration API进行文档库的迁移。 操作说明之前先来说下SharePoint Migration API他的大概功能,本身SharePoint Migration API其实已经有不...

mxy00000 ⋅ 03/02 ⋅ 0

Linq 动态查询库

【原文地址】Dynamic LINQ (Part 1: Using the LINQ Dynamic Query Library) 【原文发表日期】 Monday, January 07, 2008 11:02 PM LINQ (语言级集成查询)是VS 2008 和 .NET 3.5中提供的一...

长平狐 ⋅ 2013/03/28 ⋅ 0

Office 365之SkyDrive Pro

随O365最新更新一起发布的SkyDrive Pro能够保证企业人员的本地文档和云端文档的同步,使得企业人员能够随时掌控最新信息。而这一强大工具的使用却非常简单,只需轻点鼠标就能完成。 首先,登...

loveunicom ⋅ 2013/07/11 ⋅ 0

安装Office2007

这个是毫无疑问的需要安装,Shartpoint全称是Microsoft Office SharePoint Server 2007,所以又简称为MOSS,它是 2007 Microsoft Office system 的一部分。 Office SharePoint Server 2007 ...

彭博 ⋅ 2012/03/09 ⋅ 0

SharePoint 服务器端对象迁移文件夹

最近有个需求,写个定时迁移文件夹的小程序,因为计时器任务比较繁琐,所以选择了控制台程序。然后,用windows的计划任务执行,也许,会有广大朋友需要类似的功能,简单的分享一下代码逻辑,...

技术小胖子 ⋅ 2017/11/01 ⋅ 0

SharePoint中的Module

Module的作用是将解决方案中的文件部署到SharePoint Server的目录下,Module是 SharePoint 解决方案中的文件容器。 在部署解决方案时,模块中的文件将复制到 SharePoint Server 上的指定文件...

hxyhxl ⋅ 2014/09/26 ⋅ 0

CKEditor 发布 SharePoint 集成解决方案

CKEditor 发布了免费版的 CKEditor for SharePoint, 这是一个独特的解决方案,用以集成到微软 SharePoint 平台上替换原有的编辑器做为所见即所得的编辑器。 CKEditor for SharePoint 主要特性...

红薯 ⋅ 2010/11/30 ⋅ 2

C# 创建Word项目标号列表、多级编号列表

在Word文档中,对于有多条并列的信息内容或者段落时,我们常以添加项目标号的形式来使文档条理化,在阅读时,文档也更具美观性。另外,对于在逻辑上存在一定层级结构的内容时,也可以通过多级...

E_iceblue ⋅ 03/27 ⋅ 0

关于Microsoft Online Services 登录应用程序

原先我的登录都是直接的Web上登录的,但BPOS的管理员用户名长的变态,我还是尝试下用Microsoft Online Services 登录应用程序吧 还是Web方式的登录到我的公司门户,在主菜单栏中点击下载选项...

彭博 ⋅ 2012/03/09 ⋅ 0

SharePoint 2010多语言UI,以及开发人员需要注意的

SharePoint 2010支持同一个网站呈现出不同语言的UI。比如,一个中文版的SharePoint 2010系统,管理员可以在服务器上安装SharePoint 2010英文语言包,然后在网站设置的“语言设置”中,选择“...

kaneb0y ⋅ 2011/02/24 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 22分钟前 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 26分钟前 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 29分钟前 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 47分钟前 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 54分钟前 ⋅ 0

SpringBoot简单使用ehcache

1,SpringBoot版本 2.0.3.RELEASE ①,pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELE......

暗中观察 ⋅ 55分钟前 ⋅ 0

监控各项服务

比如有三个服务, 为了减少故障时间,增加监控任务,使用linux的 crontab 实现. 步骤: 1,每个服务写一个ping接口 监控如下内容: 1,HouseServer 是否正常运行,所以需要增加一个ping的接口 ; http...

黄威 ⋅ 58分钟前 ⋅ 0

Spring源码解析(八)——实例创建(下)

前言 来到实例创建的最后一节,前面已经将一个实例通过不同方式(工厂方法、构造器注入、默认构造器)给创建出来了,下面我们要对创建出来的实例进行一些“加工”处理。 源码解读 回顾下之前...

MarvelCode ⋅ 58分钟前 ⋅ 0

nodejs __proto__跟prototype

前言 nodejs中完全没有class的这个概念,这点跟PHP,JAVA等面向对象的语言很不一样,没有class跟object的区分,那么nodejs是怎么样实现继承的呢? 对象 对象是由属性跟方法组成的一个东西,就...

Ai5tbb ⋅ 今天 ⋅ 0

Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库

Q: Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库 A: 执行以下2条命令解决: apt-get install php-mysql service apache2 restart php -m 执行后会多以下4个模块: mysqli mysqlnd...

SamXIAO ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部