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

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. Java 监控请求

    监控对象 import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.Map.Ent ...

  2. Sidekiq任务堵塞问题

    今天发现服务器上的sidekiq 线程全忙.队列里任务积累了好多. sidekiq里的任务基本都是爬虫脚本,都需要请求外部网站.但是有些网站的响应时间或者读取时间太久,一直一直卡在那里.使得后面的任务 ...

  3. 从头学Qt Quick(1) --体验快速构建动态效果界面

    自2005年Qt4发布以来,Qt已经为成千上万的应用程序提供了框架服务,现在Qt已经基本上支持所有的开发平台了,这里面既包含了桌面.嵌入式领域,也包括了Android.IOS.WP等移动操作平台,甚至 ...

  4. 解决Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future:

    php 5个版本,5.2.5.3.5.4.5.5,怕跟不上时代,新的服务器直接上5.5,但是程序出现如下错误:Deprecated: mysql_connect(): The mysql extens ...

  5. Access导出csv 内容添加双引号 vba

    要求:导出的csv文件,用文本工具打开时,文字内容需要有双引号,如下:"1","name1","name2","" 我之 ...

  6. iOS 7.1 安装 企业应用 提示 无法下载应用程序

    首先这种情况排除https影响,这个就不提了.请自行查询iOS https 部署. 其次系统版本是iOS 7.1,之后的版本安装都没问题. 说下我是怎么发现问题的,我找了个真机,发现直接调试提示bun ...

  7. canvas剪裁图片并上传,前端一步到位,无需用到后端

    背景: 当前主流的图片剪裁主要有两种实现方式. 1:flash操作剪裁.2:利用js和dom操作剪裁. 目前看来这个剪裁主要还是先通过前端上传图片到服务器,然后前端操作后把一些坐标和大小数据传到后台, ...

  8. Erlang进程的Link机制

    这篇文章还不是最终版,有时间时,我会再来补充完善. 什么是link Erlang程序基于进程建模,进程之间的交互机制有收发消息,link和monitor.其中,收发消息通常用于正常的进程间通讯,而li ...

  9. Codeforces Round #313 (Div. 1) B. Equivalent Strings

    Equivalent Strings Problem's Link: http://codeforces.com/contest/559/problem/B Mean: 给定两个等长串s1,s2,判断 ...

  10. C++ - 多线程的实现

    支持多线程可谓是C++语言最大的变化之一. 此前,C++只能利用操作系统的功能(Unix族系统使用pthreads库),或是例如OpenMP和MPI这些代码库,来实现多核计算的目标. C++本身并没有 ...