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

时间:2021-08-19 07:48:47

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

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>");
}
} }
}