zoukankan      html  css  js  c++  java
  • using CSOM upload files and folders recursively & update metadata

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using SP = Microsoft.SharePoint.Client;
    using System.IO;
    using NPOI.SS.UserModel;
    using NPOI.HSSF.UserModel;
    
    namespace SPWidget
    {
        public partial class frmMain : Form
        {
            DataTable dt;
            HSSFWorkbook hssfworkbook;
            string _logPath = string.Format(GlobalConst.LOG_PATH, Application.StartupPath);
    
    
            public frmMain()
            {
                InitializeComponent();
            }
    
            private void frmMain_Load(object sender, EventArgs e)
            {
                txtSiteUrl.Text = GlobalConst.SITE_URL;
                txtSiteDocPath.Text = GlobalConst.SITE_DOC_PATH;
                lblMessage.Text = string.Empty;
    
                if (!Directory.Exists(_logPath))
                {
                    Directory.CreateDirectory(_logPath);
                }
            }
    
            private void InitializeWorkbook(string path)
            {
                using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read))
                {
                    hssfworkbook = new HSSFWorkbook(file);
                }
            }
    
            private void ConvertToDataTable()
            {
                dt = new DataTable();
                ISheet sheet = hssfworkbook.GetSheetAt(0);
                System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
    
                for (int j = 0; j < 26; j++)
                {
                    dt.Columns.Add(Convert.ToChar(((int)'A') + j).ToString());
                }
    
                while (rows.MoveNext())
                {
                    IRow row = (HSSFRow)rows.Current;
                    DataRow dr = dt.NewRow();
    
                    for (int i = 0; i < row.LastCellNum; i++)
                    {
                        ICell cell = row.GetCell(i);
    
    
                        if (cell == null)
                        {
                            dr[i] = null;
                        }
                        else
                        {
                            dr[i] = cell.ToString();
                        }
                    }
                    dt.Rows.Add(dr);
                }
            }
    
            private void btnArchivePath_Click(object sender, EventArgs e)
            {
                var dlg = new FolderBrowserDialog();
                if (dlg.ShowDialog() == DialogResult.OK)
                {
                    txtArchivePath.Text = dlg.SelectedPath;
                }
            }
    
            private void btnExcelPath_Click(object sender, EventArgs e)
            {
                var dlg = new OpenFileDialog();
                dlg.Filter = "Excel Files(*.xls,*.xlsx)|*.xls;*.xlsx";
                if (dlg.ShowDialog() == DialogResult.OK)
                {
                    txtExcelPath.Text = dlg.FileName;
                    lblMessage.Text = "loading...";
                    Application.DoEvents();
    
                    InitializeWorkbook(dlg.FileName);
                    ConvertToDataTable();
                        
                    //A:FullPath,B:FileName,C:FolderStructure,D:Updater,E:UpdateDate,F:ProfileName,G:(Index_1,2,3,4,N...)
                    dgvData.DataSource = dt;
                    lblMessage.Text = string.Empty;
    
                }
            }
    
            /// <summary>
            /// add folder
            /// </summary>
            /// <param name="folderPath">etc:"aa/aa1/aa12"</param>
            private void AddFolder(string folderPath)
            {
                var ctx = new SP.ClientContext(txtSiteUrl.Text);
                ctx.Credentials = new System.Net.NetworkCredential(GlobalConst.USERNAME, GlobalConst.PASSWORD, GlobalConst.DOMAIN);
    
                var list = ctx.Web.Lists.GetByTitle("Documents");
                if (folderPath.IndexOf("/") == -1)
                {
                    list.RootFolder.Folders.Add(txtSiteDocPath.Text + "/" + folderPath);
                    ctx.ExecuteQuery();
                }
                else
                {
                    var folderLevel = folderPath.Split('/');
                    for (int i = 0; i < folderLevel.Length; i++)
                    {
                        var folderCombine = string.Empty;
                        for (int j = 0; j <= i; j++)
                        {
                            folderCombine += folderLevel[j] + "/";
                        }
    
                        list.RootFolder.Folders.Add(txtSiteDocPath.Text + "/" + folderCombine.TrimEnd('/'));
                        ctx.ExecuteQuery();
                    }
                }
            }
    
            /// <summary>
            /// add file
            /// </summary>
            /// <param name="filePath">full physical path</param>
            /// <param name="folderPath">etc:"aa/aa1/aa12/",必須要有"/"</param>
            /// <param name="fileName">file name</param>
            /// <param name="fields">meta column</param>
            /// <param name="values">meta data</param>
            /// <param name="values">log file name</param>
            private void AddFile(string filePath, string folderPath, string fileName, string[] fields, string[] values, string logFileName)
            {
                try
                {
                    var ctx = new SP.ClientContext(txtSiteUrl.Text);
                    ctx.Credentials = new System.Net.NetworkCredential(GlobalConst.USERNAME, GlobalConst.PASSWORD, GlobalConst.DOMAIN);
    
                    var arrDocTitle = txtSiteDocPath.Text.Split('/');
                    var list = ctx.Web.Lists.GetByTitle(arrDocTitle[arrDocTitle.Length - 1].Replace("Shared Documents", "Documents"));
                    if (!File.Exists(filePath))
                    {
                        File.AppendAllText(_logPath + "/" + logFileName, string.Format("file "{0}" is not exists 
    ", filePath));
                        return;
                    }
                    var fileBytes = File.ReadAllBytes(filePath);
                    var fileInfo = new SP.FileCreationInformation()
                    {
                        Url = txtSiteDocPath.Text + "/" + folderPath + fileName,
                        Overwrite = true,
                        Content = fileBytes
                    };
    
                    var newfile = list.RootFolder.Files.Add(fileInfo);
                    ctx.Load(newfile);
    
                    //load target folder files
                    var items = list.GetItems(new SP.CamlQuery()
                    {
                        FolderServerRelativeUrl = txtSiteDocPath.Text + "/" + folderPath
                    });
                    ctx.Load(items);
                    ctx.ExecuteQuery();
    
                    //update metadata
                    var oItem = items.Single(x => x["FileLeafRef"].ToString() == fileName);
    
                    for (var i = 0; i < fields.Length; i++)
                    {
                        oItem[fields[i]] = values[i];
                    }
                    oItem.Update();
    
                    ctx.ExecuteQuery();
    
                    File.AppendAllText(_logPath + "/" + logFileName, string.Format("upload "{0}" success
    ", filePath));
    
                }
                catch (Exception ex)
                {
                    File.AppendAllText(_logPath + "/" + logFileName, string.Format("upload "{0}" fail
    ", filePath));
                    //MessageBox.Show(ex.Message);
                }
            }
    
            private void btnUpload_Click(object sender, EventArgs e)
            {
                lblMessage.Text = string.Empty;
    
                if (txtArchivePath.Text == "" || txtExcelPath.Text == "")
                {
                    lblMessage.Text = ""Archive Path" and "Excel Path" can't be empty.";
                    return;
                }
    
                var logFileName = GlobalConst.LOG_FILENAME_FORMAT;
    
                try
                {
                    //delete header row
                    dt.Rows[0].Delete();
    
                    lblMessage.Text = "uploading...";
                    Application.DoEvents();
    
                    //upload data
                    foreach (DataRow dr in dt.Rows)
                    {
                        if (dr[0].ToString() != "")
                        {
                            //folder structure & file
                            var fullPath = txtArchivePath.Text + dr[0].ToString();
    
                            var fileName = dr[1].ToString();
                            var folderPath = dr[2].ToString().Replace("\", "/").TrimStart('/');
    
                            //extend meta
                            var index1 = dr[3].ToString();
                            var index2 = dr[4].ToString();
                            var index3 = dr[5].ToString();
                            var index4 = dr[6].ToString();
                            var index5 = dr[7].ToString();
                            var index6 = dr[8].ToString();
                            var index7 = dr[9].ToString();
                            var index8 = dr[10].ToString();
                            var index9 = dr[11].ToString();
                            var index10 = dr[12].ToString();
                            var index11 = dr[13].ToString();
                            var index12 = dr[14].ToString();
                            var index13 = dr[15].ToString();
    
                            AddFolder(folderPath);
                            AddFile(fullPath, folderPath, fileName
                                , GlobalConst.METADATA_FIELDS.Split(',')
                                , new[] { index1, index2, index3, index4, index5, index6, index7, index8, index9, index10, index11, index12, index13 }
                                , logFileName);
    
                            
                        }
                    }
    
                    lblMessage.Text = string.Format("upload success,the log file name is"{0}"", logFileName);
    
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
    
            private void systemSettingsToolStripMenuItem_Click(object sender, EventArgs e)
            {
                var frm = new frmSystemSetting();
                frm.ShowDialog();
            }
    
            private void restartToolStripMenuItem_Click(object sender, EventArgs e)
            {
                if (MessageBox.Show("confirm restart?", "tips", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    Application.Restart();
                }
            }
    
            private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
            {
                var frm = new frmAbout();
                frm.Show();
            }
    
            private void logToolStripMenuItem_Click(object sender, EventArgs e)
            {
                var frm = new frmLog();
                frm._logPath = this._logPath;
                frm.ShowDialog();
            }
        }
    }
    
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings>
        <add key="Domain" value="megatest"/>
        <add key="UserName" value="nick.zhong"/>
        <add key="Password" value="Mega@data"/>
        <add key="SiteUrl" value="http://win2012-sp/sites/nick"/>  
        <add key="SiteDocPath" value="/sites/nick/Shared Documents"/>
        <add key="MetadataFields" value="Updater,UpdateDate,ProfileName,INDEX_1,INDEX_2,INDEX_3,INDEX_4,INDEX_5"/>
        <add key="LogPath" value="{0}/Log"/>
      </appSettings>
    </configuration>
    App.Config
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Configuration;
    
    namespace SPWidget
    {
        public class GlobalConst
        {
            public static readonly string SITE_URL = ConfigurationManager.AppSettings["SiteUrl"].ToString();
            public static readonly string SITE_DOC_PATH = ConfigurationManager.AppSettings["SiteDocPath"].ToString();
            public static readonly string METADATA_FIELDS = ConfigurationManager.AppSettings["MetadataFields"].ToString();
    
            public static readonly string DOMAIN = ConfigurationManager.AppSettings["Domain"].ToString();
            public static readonly string USERNAME = ConfigurationManager.AppSettings["UserName"].ToString();
            public static readonly string PASSWORD = ConfigurationManager.AppSettings["Password"].ToString();
    
            public static readonly string LOG_PATH = ConfigurationManager.AppSettings["LogPath"].ToString();
            public static readonly string LOG_FILENAME_FORMAT = DateTime.Now.ToString("yyyyMMddHHmmss") + ".log";
        }
    }
    GlobalConst
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Collections;
    using System.Configuration;
    using SP = Microsoft.SharePoint.Client;
    
    namespace SPWidget
    {
        public partial class frmSystemSetting : Form
        {
            public frmSystemSetting()
            {
                InitializeComponent();
                dgvFieldsInfo.AutoGenerateColumns = false;
            }
    
            private void btnSave_Click(object sender, EventArgs e)
    
            {
                var dicCfg = new Dictionary<string, string>();
                dicCfg.Add("SiteUrl", txtSiteUrl.Text);
                dicCfg.Add("SiteDocPath", txtSiteDocPath.Text);
                dicCfg.Add("MetaDataFields", txtMetadataFields.Text);
                dicCfg.Add("Domain", txtDomain.Text);
                dicCfg.Add("UserName", txtUserName.Text);
                dicCfg.Add("Password", txtPassword.Text);
    
                var cfg = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
                foreach (var kvp in dicCfg)
                {
                    cfg.AppSettings.Settings[kvp.Key].Value = kvp.Value;
                    cfg.Save();
                }
    
                if (MessageBox.Show("save success, restart?", "tips", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
                {
                    Application.Restart();
                }
            }
    
            private void frmSystemSetting_Load(object sender, EventArgs e)
            {
                txtMetadataFields.Text = GlobalConst.METADATA_FIELDS;
                txtSiteDocPath.Text = GlobalConst.SITE_DOC_PATH;
                txtSiteUrl.Text = GlobalConst.SITE_URL;
                txtDomain.Text = GlobalConst.DOMAIN;
                txtUserName.Text = GlobalConst.USERNAME;
                txtPassword.Text = GlobalConst.PASSWORD;
            }
    
            private void btnQueryListMeta_Click(object sender, EventArgs e)
            {
                lbListName.Items.Clear();
    
                if (txtSiteUrl.Text != "")
                {
                    var ctx = new SP.ClientContext(txtSiteUrl.Text);
                    ctx.Credentials = new System.Net.NetworkCredential(txtUserName.Text, txtPassword.Text, txtDomain.Text);
                    var list = ctx.Web.Lists;
    
                    ctx.Load(list);
                    ctx.ExecuteQuery();
    
                    foreach (var l in list)
                    {
                        lbListName.Items.Add(l.Title);
                    }
                }
                else
                {
                    MessageBox.Show("please set the site url first", "tips", MessageBoxButtons.OK);
                }
            }
    
            private void lbListName_SelectedIndexChanged(object sender, EventArgs e)
            {
    
                var selectedItem = lbListName.SelectedItem;
    
                var ctx = new SP.ClientContext(txtSiteUrl.Text);
                ctx.Credentials = new System.Net.NetworkCredential(txtUserName.Text, txtPassword.Text, txtDomain.Text);
                var list = ctx.Web.Lists.GetByTitle(selectedItem.ToString());
    
                var fieldList = list.Fields;
                ctx.Load(fieldList);
                ctx.ExecuteQuery();
    
                var fList = new List<FieldsInfo>();
                foreach (var f in fieldList)
                {
                    fList.Add(new FieldsInfo() { Title = f.Title, InternalName = f.InternalName });
                }
    
                dgvFieldsInfo.DataSource = fList;
    
            }
    
            public class FieldsInfo
            {
                public string Title { get; set; }
                public string InternalName { get; set; }
            }
    
            private void dgvFieldsInfo_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
            {
                var fieldText = dgvFieldsInfo.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
                txtMetadataFields.Text = txtMetadataFields.Text + "," + fieldText;
            }
    
            private void btnClearFields_Click(object sender, EventArgs e)
            {
                txtMetadataFields.Text = string.Empty;
            }
    
            private void btnFormat_Click(object sender, EventArgs e)
            {
                var sourceFieldText = txtMetadataFields.Text.Trim();
                if (sourceFieldText != "" && (sourceFieldText.IndexOf(",") >= 0 || sourceFieldText.IndexOf("") >= 0))
                {
                    var fieldText = txtMetadataFields.Text.Replace("", ",").Split(',');
                    var list = new List<string>();
                    var sb = new StringBuilder();
                    foreach (var s in fieldText)
                    {
                        if (s != "")
                        {
                            if (!list.Contains(s))
                            {
                                list.Add(s.Trim());
                                sb.AppendFormat("{0},", s.Trim());
                            }
                        }
                    }
    
                    txtMetadataFields.Text = sb.ToString().TrimEnd(',');
                }
    
            }
    
        }
    }
    SystemSetting

    Ref:http://www.cnblogs.com/jaxu/archive/2011/11/29/2267572.html
     

  • 相关阅读:
    io学习
    asp.net文件上传进度条研究
    asp.net页面中的Console.WriteLine结果如何查看
    谨慎跟随初始目的不被关联问题带偏
    android 按钮特效 波纹 Android button effects ripple
    安卓工作室 日志设置
    安卓工作室 文件浏览器 android studio File browser
    一个新的Android Studio 2.3.3可以在稳定的频道中使用。A new Android Studio 2.3.3 is available in the stable channel.
    新巴巴运动网上商城 项目 快速搭建 教程 The new babar sports online mall project quickly builds a tutorial
    码云,git使用 教程-便签
  • 原文地址:https://www.cnblogs.com/ncore/p/3175541.html
Copyright © 2011-2022 走看看