文档章节

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

 木宛城主
发布于 2015/03/02 19:39
字数 573
阅读 9
收藏 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
06/26
0
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
202
0
Office 365之SkyDrive Pro

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

loveunicom
2013/07/11
0
0
安装Office2007

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

彭博
2012/03/09
44
0
SharePoint 服务器端对象迁移文件夹

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

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

没有更多内容

加载失败,请刷新页面

加载更多

Future,Thread,Callable,Executors.newXXXThreadPool

package cunrent.future;import java.util.concurrent.*;public class FutureCook { public static void main(String[] args) throws InterruptedException, ExecutionExcept......

noteman
26分钟前
2
0
shing boot 做session共享 redis

因为多台服务器负载均衡,在获取客户端的sessionId的时候,会出现第一次和第二次不一样,因为负载均衡的缘故,你的服务器最少两台,那么客户端连接第一次请求和第二次请求如果不是同一台服务...

小马_wolf
30分钟前
1
0
【Springboot+mybatis】 解析Excel并批量导入到数据库

【Springboot+mybatis】 解析Excel并批量导入到数据库置顶 2018年01月16日 20:05:52 冉野丶 阅读数:4060 标签: excel导入数据库 文件上传 excel解析 更多个人分类: POI 工作问题归纳...

奥特曼之王
32分钟前
2
0
Mac OS下安装Axure RP 8.0.0.3312 中文破解版

Mac下一款快速原型设计工具——Axure RP,有了它可以大大提高你的工作效率。此次带来的是Axure RP 8.0.0.3312 版本。 介绍 Axure RP 能帮助网站需求设计者,快捷而简便的创建基于网站构架图的...

james_laughing
34分钟前
1
0
【Guava】使用Guava的RateLimiter做限流

一、常见的限流算法 目前常用的限流算法有两个:漏桶算法和令牌桶算法。 1.漏桶算法 漏桶算法的原理比较简单,请求进入到漏桶中,漏桶以一定的速率漏水。当请求过多时,水直接溢出。可以看出...

大海201506
36分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部