最近项目遇到一个很麻烦的问题,原以为很容易解决,结果搞了那么久,先开个头,再慢慢写

SharePoint 2010 ——自定义上传页面与多文件上传解决方案

1.创建Sharepoint空白项目,创建应用程序页面,创建custom action,

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<CustomAction Description="Customize the upload.aspx file for a document library"
RegistrationType="List"
RegistrationId="101"
GroupId="Permissions"
Id="05511583-fb44-4eca-817a-45892250da9e"
Location="Microsoft.SharePoint.ListEdit"
Sequence="1000"
Title="Customize Upload Form (TCL SUNJUNLIN)"
>
<UrlAction Url="~site/_layouts/Custom.ApplicationPage/SetCustomUploadProperties.aspx?List={ListId}" />
</CustomAction>
</Elements>

2自定义项目feature.

using System;
using System.Runtime.InteropServices;
using System.Security.Permissions;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Security;
using Microsoft.SharePoint.Administration; namespace Custom.ApplicationPage.Features.CustomApp
{
/// <summary>
/// 此类用于处理在激活、停用、安装、卸载和升级功能的过程中引发的事件。
/// </summary>
/// <remarks>
/// 附加到此类的 GUID 可能会在打包期间使用,不应进行修改。
/// </remarks> [Guid("a4314576-6717-47fc-909b-8e692f1d32c1")]
public class CustomAppEventReceiver : SPFeatureReceiver
{
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
try
{
SPWeb web = properties.Feature.Parent as SPWeb;
web.CustomUploadPage = "/_layouts/Custom.ApplicationPage/CustomUpload.aspx";
web.Update();
}
catch (Exception ex)
{
LogException(ex);
throw;
}
} public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
try
{
SPWeb web = properties.Feature.Parent as SPWeb;
web.CustomUploadPage = "";
web.Update();
}
catch (Exception ex)
{
LogException(ex);
throw;
}
}
public static void LogException(Exception ex)
{
if (ex.InnerException != null)
LogException(ex.InnerException);
Log(ex.Message, ex.StackTrace);
}
public static void Log(string Message, string StackTrace)
{
//log to ULS
SPDiagnosticsService.Local.WriteTrace(, new SPDiagnosticsCategory("TCL.CustomUpload", TraceSeverity.High, EventSeverity.ErrorCritical), TraceSeverity.Unexpected, Message, StackTrace);
}
}
}

3.编写 自定义 上传页面;

 <%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
<%@ Import Namespace="Microsoft.SharePoint.ApplicationPages" %>
<%@ Register TagPrefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls"
Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CustomUpload.aspx.cs" Inherits="Custom.ApplicationPage.Layouts.CustomUpload"
DynamicMasterPageFile="~masterurl/default.master" %> <asp:Content ID="PageHead" ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server">
<link href="/_layouts/Custom.ApplicationPage/JS/uploadify.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="/_layouts/Custom.ApplicationPage/JS/jquery-1.9.1.min.js" ></script>
<script type="text/javascript" src="/_layouts/Custom.ApplicationPage/JS/jquery.uploadify.js"></script> <script type="text/javascript">
$(document).ready(function () {
var filelist = "";
var currentDocLib = $("#<%=hiddenCurrentDocLib.ClientID %>").val();
var listID = "";
if (currentDocLib != "" && currentDocLib != null) { listID = currentDocLib.substring(currentDocLib.indexOf('{') + , currentDocLib.lastIndexOf('}'));
}
$("#uploadify").uploadify({
'swf': '/_layouts/Custom.ApplicationPage/JS/uploadify.swf',
'uploader': '/_layouts/Custom.ApplicationPage/FilesHandler.ashx?listID=' + listID,
'cancelImg': '/_layouts/Custom.ApplicationPage/JS/uploadify-cancel.png',
'buttonText': '选择文件...',
'auto': false,
'multi': true,
'onSelect': function (file) { var mycars = new Array()
mycars[] = "\\"
mycars[] = "/"
mycars[] = ":"
mycars[] = "*"
mycars[] = "?"
mycars[] = "\""
mycars[] = "<"
mycars[] = ">"
mycars[] = "|"
mycars[] = "#"
mycars[] = "{"
mycars[] = "}"
mycars[] = "%"
mycars[] = "~"
mycars[] = "&" for (i = ; i < mycars.length; i++) {
var name = file.name;
if (name.indexOf(mycars[i]) != - && name != null) {
filelist = filelist + " \n " + name;
}
}
$("#<%=hidNotAllowFile.ClientID %>").val(filelist);
},
'onQueueComplete': function (queueData) { window.frameElement.commitPopup();
},
'onDialogClose': function (queueData) {
var notAllowFile = $("#<%=hidNotAllowFile.ClientID %>").val();
if (notAllowFile != "" && notAllowFile != null) {
alert(notAllowFile + '\n文件名包含非法字符,系统将自动替换为合法字符'); }
filelist = "";
} });
});
</script>
</asp:Content>
<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server" >
<div style="width:100%; height:300px;">
<div id="fileQueue">
</div>
<input type="file" name="uploadify" id="uploadify" />
<p style="text-align:right">
<a href="javascript:$('#uploadify').uploadify('upload', '*')">上传</a>
&nbsp; &nbsp;
<a href="javascript:$('#uploadify').uploadify('cancel', '*')">取消</a>
</p> <asp:HiddenField ID="hidNotAllowFile" runat="server" /> <asp:HiddenField ID="hiddenCurrentDocLib" runat="server" />
</div>
</asp:Content>
<asp:Content ID="PageTitle" ContentPlaceHolderID="PlaceHolderPageTitle" runat="server">
多文件上传
</asp:Content>
<asp:Content ID="PageTitleInTitleArea" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea"
runat="server">
我的应用程序页上传文档
</asp:Content>

4.应用Uploadfiy上传插件

5.编写上传服务FilesHandler.ashx,这个文件需要手动创建,找不到这个模板,

参考:http://cn.bing.com/search?q=SharePoint%E9%A1%B9%E7%9B%AE%E4%B8%AD%E5%88%9B%E5%BB%BAHttpHandler+.&form=IE10TR&src=IE10TR&pc=LNJB

using System.Web;
using System.Runtime.InteropServices;
using System;
using System.IO;
using Microsoft.SharePoint;
using System.Text.RegularExpressions;
using System.Collections.Generic;
using System.Collections; namespace Custom.ApplicationPage.Layouts.Custom.ApplicationPage
{
[Guid("26c725b1-07d3-4326-ab6b-7343abe0a7ed")]
public class FilesHandler : IHttpHandler
{
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Charset = "utf-8";
string listID = "";
if (context.Request.QueryString["listID"] != null && !string.IsNullOrEmpty(context.Request.QueryString["listID"].ToString()))
{
listID = context.Request.QueryString["listID"]; } HttpPostedFile file = context.Request.Files["Filedata"];
string uploadPath =
HttpContext.Current.Server.MapPath(@context.Request["folder"]) + "\\";
if (file != null)
{
if (!Directory.Exists(uploadPath))
{
Directory.CreateDirectory(uploadPath);
}
//file.SaveAs(uploadPath + file.FileName);
OnSumitToMOSS(file, context, listID);
//下面这句代码缺少的话,上传成功后上传队列的显示不会自动消失
context.Response.Write("");
}
else
{
context.Response.Write("");
}
}
public void OnSumitToMOSS(HttpPostedFile postedFile,HttpContext context,string listID)
{
try
{
using (SPSite site = SPContext.Current.Site)
{ using (SPWeb web = site.OpenWeb())
{
web.AllowUnsafeUpdates = true;//关闭页面安全性验证
Guid gid=new Guid(listID);
SPDocumentLibrary docLib = (SPDocumentLibrary)web.Lists[gid];
//SPDocumentLibrary docLib = (SPDocumentLibrary)web.GetList("http://moss:9527/DocLib");
///'检查文件扩展名字
if (postedFile != null)
{
string fileName = postedFile.FileName;
if (!string.IsNullOrEmpty(fileName))
{ ArrayList myChar = new ArrayList();
myChar.Add("\\");
myChar.Add( "/");
myChar.Add( ":");
myChar.Add( "*");
myChar.Add( "?");
myChar.Add( "\"");
myChar.Add( "<");
myChar.Add( ">");
myChar.Add( "|");
myChar.Add( "#");
myChar.Add( "{");
myChar.Add( "}");
myChar.Add( "%");
myChar.Add( "~");
myChar.Add( "&"); foreach (string str in myChar)
{
if (fileName.IndexOf(str) != -)
{
fileName= fileName.Replace(str, "_");
}
} SPFile file = docLib.RootFolder.Files.Add(fileName, postedFile.InputStream);//向文档库根目录添加文件
file.Update();//保存文件
docLib.Update();
web.Update();
}
}
web.AllowUnsafeUpdates = false;//上传完毕重新开启页面安全性验证
//this.Context.Response.Write("<script type='text/javascript'>window.frameElement.commitPopup();</script>"); }
}
}
catch (System.Exception Ex)
{
context.Response.Write("<script type='text/javascript'>alert(" + Ex.Message + ");</script>");
}
} }
}

SharePoint 2010 ——自定义上传页面与多文件上传解决方案的更多相关文章

  1. PHP实现单文件、多文件上传 封装 面向对象实现文件上传

    文件上传配置 客户端配置 1.表单页面 2.表单的发送方式为post 3.添加enctype = "multipart/form-data" <form action=&qu ...

  2. SpringBoot - 实现文件上传2(多文件上传、常用上传参数配置)

    在前文中我介绍了 Spring Boot 项目如何实现单文件上传,而多文件上传逻辑和单文件上传基本一致,下面通过样例进行演示. 多文件上传 1,代码编写 1)首先在 static 目录中创建一个 up ...

  3. 基于bootstrap的上传插件fileinput实现ajax异步上传功能(支持多文件上传预览拖拽)

    首先需要导入一些js和css文件 ? 1 2 3 4 5 6 <link href="__PUBLIC__/CSS/bootstrap.css" rel="exte ...

  4. sharepoint 2010 自定义页面布局

    在sharepoint开发中经常遇到 自定义网站栏.内容类型,页面布局和模板页也会遇到,遇到机会就相对比较小. 首先新建一个空的sharepoint项目: 1)创建网站兰: 修改SiteColumns ...

  5. sharepoint 2010自定义访问日志列表设置移动终端否和客户端访问系统等计算列的公式

    上个月本人开发和上线了一个在SharePoint 2010上基于HTML5的移动OA网站,后端服务采用自定义的基于AgilePoint工作流引擎的Sharepoint Web服务,前端主要采用Jque ...

  6. [SharePoint 2010] 自定义字段类型开发(二)

    在SharePoint 2010中实现View Action Button效果. http://www.sharepointblogs.be/blogs/vandest/archive/2008/06 ...

  7. 自定义MVC框架之工具类-文件上传类

    截止目前已经改造了3个类: ubuntu:通过封装验证码类库一步步安装php的gd扩展 自定义MVC框架之工具类-分页类的封装 该文件上传类功能如下: 1,允许定制上传的文件类型,文件mime信息,文 ...

  8. SharePoint 2010自定义母版页小技巧——JavaScript和CSS引用

    通常在我们的项目中,都会涉及到母版页的定制.并且必不可少的,需要配合以一套自己的JavaScript框架和CSS样式.你有没有遇到过这样的情况呢,在开发环境和UAT时都还算顺利,但是当最终部署到生产服 ...

  9. 让Android中的webview支持页面中的文件上传

    android webview在默认情况下是不支持网页中的文件上传功能的: 如果在网页中有<input type="file" />,在android webview中 ...

随机推荐

  1. sitemesh2在tomcat和weblogic中同时使用的配置问题

    (一)拦截*.do,装饰器中匹配do tomcat 可行 weblogic 不可行 web.xml ~~~ <filter> <filter-name>sitemesh< ...

  2. ARM Linux 3.x的设备树(Device Tree)

    1. ARM Device Tree起源 Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a f*cking pai ...

  3. MongoDB入门一:安装与配置

    引言 ——妈妈说名字太长排在后面或在标题堆儿中容易被大家发现. MongoDB的名字来源与单词humongous(极大的,巨大无比的)有关,它是一个可扩展.高性能.开源的NoSQL数据库. 之所以在g ...

  4. iOS- NSDateFormatter (自定义时间格式)

    一. NSDateFormatter解释 1. 日期(NSDate)是NSString类的格式(stringWithFormat),也可以改变输出,如果需要输出年代信息等则需要进行转换,等等. 2.  ...

  5. 结对编程之Fault、Error、Failure

    1.结对说明 结对对象:刘世麟  博客地址:http://www.cnblogs.com/liushilin/ 双方贡献:1:1 2.题目要求  构造程序,分别是:         •不能触发Faul ...

  6. 每天2分钟平板支撑Plank,锻炼核心肌群,远离背疼痛

    本文已转至  http://www.zhoujingen.cn/blog/2692.html 平板支撑(plank)被公认为训练核心肌群最有效的方法之一,每天坚持做可以让平坦的小腹重见天日.据说目前p ...

  7. 参数嗅探(Parameter Sniffing)(2/2)

    在参数嗅探(Parameter Sniffing)(1/2)里,我介绍了SQL Server里参数嗅探的基本概念和背后的问题.如你所见,当缓存的计划被SQL Server盲目重用时,会带来严重的性能问 ...

  8. IOS开发UI基础UIActivityIndicatorView的属性

    UIActivityIndicatorView 1.activityIndicatorViewStyle设置指示器的样式UIActivityIndicatorViewStyleWhiteLarge U ...

  9. const与readonly深度分析(.NET)

    前言 很多.NET的初学者对const和readonly的使用很模糊,本文就const和readonly做一下深度分析,包括: 1. const数据类型的优势 2. const数据类型的劣势 3. r ...

  10. 使用HttpRequester模拟发送及接收Json请求

    1.开发人员在火狐浏览器里经常使用的工具有Firebug,httprequester,restclient......火狐浏览器有一些强大的插件供开发人员使用!需要的可以在附加组件中扩展. 2.htt ...