文档库文件上传Webpart(原创)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;
using System.IO;
using System.Web.UI.WebControls.WebParts;
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Collections;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.Workflow;
namespace UploadDocument
{
public class AddFile : WebPart
{
private HtmlTableCell htmlTableCell = new HtmlTableCell();
private Button SubmitButton = new Button();
private FileUpload fileUpload = new FileUpload();
SPSite site;
SPWeb web;
private void AddControl()
{
this.fileUpload.ID = "fileUpload";
this.fileUpload.ToolTip = "上传文件";
this.fileUpload.CssClass = "upload_input";
this.htmlTableCell.Controls.Add(this.fileUpload);
this.SubmitButton.ID = this.ID + "SubmitButton";
this.SubmitButton.Text = "上传文件";
this.SubmitButton.CssClass = "upload_edit_bt";
this.SubmitButton.Click += new EventHandler(SubmitButton_Click);
this.htmlTableCell.Controls.Add(this.SubmitButton);
}
void ClearButton_Click(object sender, EventArgs e)
{
}
void SubmitButton_Click(object sender, EventArgs e)
{
try
{
if (this.fileUpload.FileName == "") return;
string strRoot = root;
if (filePath != "")
strRoot = root + "/" + filePath;
if (this.Page.Request.QueryString["RootFolder"] != null)
{
strRoot = this.Page.Request.QueryString["RootFolder"];
}
SPFile docFile = AddFileByPath(strRoot, this.fileUpload.FileName, this.fileUpload.FileBytes);
string id = docFile.Item.UniqueId.ToString();
if (dirType == defaultDirType.直接地址)
{
this.Page.Response.Redirect(dirPageURL + "?ListName=" + libName + "&RootFolder=" + strRoot + "&id=" + id + "&fileName=" + this.fileUpload.FileName);
}
else if (dirType == defaultDirType.工作流)
{
SPList list = web.Lists[libName];
SPWorkflowAssociation wrkFl = list.WorkflowAssociations[0];
site.WorkflowManager.StartWorkflow(list.GetItemByUniqueId(new Guid(id)),wrkFl, wrkFl.AssociationData,true);
string taskid = list.GetItemByUniqueId(new Guid(id)).Workflows[0].Tasks[0].ID.ToString();
string wf_url = siteUrl+"/"+list.GetItemByUniqueId(new Guid(id)).Workflows[0].TaskList.Forms[PAGETYPE.PAGE_DISPLAYFORM].Url + "?ID=" + taskid;
this.Page.Response.Redirect(wf_url);
}
}
catch (Exception ex)
{
throw ex;
}
}
//获取和设置站点的地址
private const string defaultSiteUrl = "";
private string siteUrl = defaultSiteUrl;
[Personalizable]
[WebBrowsable, Category("配置")]
[WebDisplayName("站点地址(必填),如http://eiptest/")]
[WebDescription("这里可以更换连接到文档库的地址")]
public string SiteUrl
{
get
{
return this.siteUrl;
}
set
{
siteUrl = value;
}
}
private const string defaultWebUrl = "";
private string webUrl = defaultWebUrl;
[Personalizable]
[WebBrowsable, Category("配置")]
[WebDisplayName("网站地址(可不填)")]
[WebDescription("这里可以更换连接到文档库网站的地址")]
public string WebUrl
{
get
{
return this.webUrl;
}
set
{
webUrl = value;
}
}
//获取和设置文档库名
private const string defaultLibName = "文档";
private string libName = defaultLibName;
[Personalizable]
[WebBrowsable, Category("配置")]
[WebDisplayName("文档库名(必填),如文档")]
[WebDescription("这里可以更换文档库的名字")]
public string DocLibraryName
{
get
{
return this.libName;
}
set
{
libName = value;
}
}
//设定起始节点
private const string defaultRoot = "/Documents";
private string root = defaultRoot;
[Personalizable]
[WebBrowsable, Category("配置")]
[WebDisplayName("起始节点(必填),如:/列表名/目录名")]
[WebDescription("请输入起始节点的地址")]
public string Root
{
get
{
return root;
}
set
{
if (value == "")
{
root = "/Documents";
}
else
{
root = value;
}
}
}
//设定起始节点
private const string defaultFilePath = "";
private string filePath = defaultFilePath;
[Personalizable]
[WebBrowsable, Category("配置")]
[WebDisplayName("目录名(可不填)")]
[WebDescription("请输入目录名")]
public string FilePath
{
get
{
return filePath;
}
set
{
filePath = value;
}
}
//跳转方式
public enum defaultDirType { 直接地址, 工作流 };
private defaultDirType dirType = defaultDirType.直接地址;
[Personalizable]
[WebBrowsable, Category("配置")]
[WebDisplayName("跳转方式")]
[WebDescription("请输入跳转方式")]
public defaultDirType DirType
{
get
{
return dirType;
}
set
{
dirType = value;
}
}
//设定跳转页面
private const string defaultDirPageURL = "";
private string dirPageURL = defaultDirPageURL;
[Personalizable]
[WebBrowsable, Category("配置")]
[WebDisplayName("跳转页面,如http://eip/Pages/XX.aspx")]
[WebDescription("请输入跳转页面")]
public string DirPageURL
{
get
{
return dirPageURL;
}
set
{
dirPageURL = value;
}
}
//是否显示上传菜单
public enum DisplayUploadMenu{ 显示,不显示};
private DisplayUploadMenu uploadMenu = DisplayUploadMenu.不显示;
[Personalizable]
[WebBrowsable, Category("配置")]
[WebDisplayName("是否显示上载菜单")]
[WebDescription("是否显示上载菜单")]
public DisplayUploadMenu UploadMenu
{
get
{
return uploadMenu;
}
set
{
uploadMenu = value;
}
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (this.Page.IsPostBack == true) this.AddControl();
}
protected override void CreateChildControls()
{
this.Controls.Add(this.htmlTableCell);
if (this.Page.IsPostBack == false) this.AddControl();
}
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
}
protected override void OnPreRender(EventArgs e)
{
if (uploadMenu == DisplayUploadMenu.不显示)
Page.ClientScript.RegisterClientScriptInclude(this.GetType(), "js0001", "/wpresources/JS/HiddenMenu.js");
CssRegistration cssControls = new CssRegistration();
cssControls.Name = "/wpresources/style/feiyong/css/font.css";
CssRegistration cssControls2 = new CssRegistration();
cssControls2.Name = "/wpresources/style/feiyong/css/upload_edit.css";
CssRegistration cssControls3 = new CssRegistration();
cssControls3.Name = "/wpresources/style/feiyong/css/ad_metting_room.css";
Page.Header.Controls.Add(cssControls);
Page.Header.Controls.Add(cssControls2);
Page.Header.Controls.Add(cssControls3);
}
private SPFile AddFileByPath(string RootFolder, string fileName, byte[] filebyte)
{
try
{
site = new SPSite(siteUrl);
if (webUrl != "")
{
web = site.OpenWeb(webUrl.Trim());
}
else
{
web = site.OpenWeb();
}
site.AllowUnsafeUpdates = true;
//SPWeb web = SPControl.GetContextWeb(Context);
web.AllowUnsafeUpdates = true;
SPList list = web.Lists[libName];
SPFolder rootFolder = web.GetFolder(RootFolder);
if (rootFolder.Exists)
{
//创建文件
byte[] binFile = filebyte;// readFile(filePath);
SPFile spFile = web.GetFile(rootFolder.Url + "/" + fileName);
if (spFile.Exists)
{
spFile.Delete();
}
//写入文件
web.AllowUnsafeUpdates = true;
//优化的方法,一次提交
Hashtable ht=new Hashtable();
ht.Add("vti_title", fileName);
SPListItem item=rootFolder.Files.Add(rootFolder.Url + "/" + fileName, binFile, ht, true).Item;
string id = item.UniqueId.ToString();
//加入权限
//SharePointRole.addRole(site, web, item, "读取");
web.AllowUnsafeUpdates = false;
return spFile;
}
return null;
}
catch (Exception ex)
{
throw ex;
}
}
private void addFolder(string checkPath, string createPath, string folderName, SPWeb web, SPList list)
{
SPFolder rFolder = web.GetFolder(checkPath);
//判断是否存在文件夹,没有则新建
if (!rFolder.Exists)
{
SPListItem newFolder = list.Items.Add(createPath, SPFileSystemObjectType.Folder, folderName);
web.AllowUnsafeUpdates = true;
newFolder.Update();
web.AllowUnsafeUpdates = false;
rFolder = newFolder.Folder;
}
}
private byte[] readFile(string fileName)
{
FileStream pFileStream = null;
byte[] pReadByte = new byte[0];
try
{
pFileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader(pFileStream);
r.BaseStream.Seek(0, SeekOrigin.Begin); //将文件指针设置到文件开
pReadByte = r.ReadBytes((int)r.BaseStream.Length);
return pReadByte;
}
catch
{
return pReadByte;
}
}
//写byte[]到fileName
private bool writeFile(byte[] pReadByte, string fileName)
{
FileStream pFileStream = null;
try
{
pFileStream = new FileStream(fileName, FileMode.OpenOrCreate);
pFileStream.Write(pReadByte, 0, pReadByte.Length);
}
catch
{
return false;
}
finally
{
if (pFileStream != null)
pFileStream.Close();
}
return true;
}
}
}
目前维护的开源产品:https://gitee.com/475660