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("站点地址(必填),如")] [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("跳转页面,如")] [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; }
}
}