Esempio n. 1
0
        /// <summary>
        /// 计算文件分块大小
        /// </summary>
        private int CaculateProgressBarMaxSize(int iFileLength)
        {
            int iStep = 0;

            if (iFileLength <= 5242880)
            {
                iStep = 204800;
            }
            else if (iFileLength <= 10485760)
            {
                iStep = 512000;
            }
            else if (iFileLength <= 20971520)
            {
                iStep = 1048576;
            }
            else
            {
                iStep = 2097152;
            }

            LogTrace.TraceVerbose("Caculate the size of bytes ({0}) that in the uploading stream each time.", iStep);

            return((int)Math.Ceiling((double)iFileLength / (double)iStep));
        }
Esempio n. 2
0
 /// <summary>
 /// 从注册表中获取Web Service的URL地址
 /// </summary>
 private void GetWebServiceURL()
 {
     try
     {
         RegistryKey regKey = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\MICROSOFT\OFFICE\OUTLOOK\ADDINS\PinganAttachment.OutlookAddin", false);
         WebServiceUrl = regKey.GetValue("WosAppServiceURL").ToString();
         LogTrace.TraceVerbose("Read web service URL({0}) from register table.", WebServiceUrl);
     }
     catch (Exception ept)
     {
         WebServiceUrl = String.Empty;
         LogTrace.TraceException(ept);
     }
 }
Esempio n. 3
0
        /// <summary>
        /// 创建PutOid请求,通过之前预申请的oid向Wos云端上传文件
        /// </summary>
        /// <param name="oid">Wos对象标识</param>
        /// <returns>返回HttpWebRequest对象</returns>
        public String ExecuteCreateSeaFileCreateLibraryRequest(String strToken, String strLibrary)
        {
            LogTrace.TraceInfo("ExecuteCreateSeaFileCreateLibraryRequest");

            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url + "/api2/repos/");

            req.Method      = "POST";
            req.ContentType = "application/x-www-form-urlencoded";
            req.Accept      = "application/json; indent=4";
            req.UserAgent   = "curl/7.19.0 (i586-pc-mingw32msvc) libcurl/7.19.0 zlib/1.2.3";
            req.Headers.Add("Authorization: Token " + strToken);
            req.Timeout   = 10000;
            req.KeepAlive = false;

            String strPostContent = "name=" + strLibrary.Trim() + "&desc=new library";

            UTF8Encoding code = new UTF8Encoding();

            try
            {
                Stream postStream = req.GetRequestStream();

                postStream.Write(code.GetBytes(strPostContent), 0, code.GetBytes(strPostContent).Length);

                postStream.Close();

                HttpWebResponse res = (HttpWebResponse)req.GetResponse();

                LogTrace.TraceInfo("Response code for CreateLibrary is {0}", res.StatusCode);

                String strResponse = String.Empty;

                Stream       rStream = res.GetResponseStream();
                StreamReader sr      = new StreamReader(rStream);
                strResponse = sr.ReadToEnd();

                req.Abort();
                res.Close();

                LogTrace.TraceVerbose("Got Server response [{0}]", strResponse);

                JObject jo = (JObject)JsonConvert.DeserializeObject(strResponse);
                return(jo["repo_id"].ToString());
            }
            catch (Exception ept)
            {
                LogTrace.TraceException(ept);
                return(String.Empty);
            }
        }
Esempio n. 4
0
 /// <summary>
 /// 在上传过程中更新进度条状态
 /// </summary>
 private void bgwUploadFile_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
 {
     try
     {
         uploadProgressBar.Show();
         lbInfo.Hide();
         uploadProgressBar.Value = e.ProgressPercentage;
         float fProgress = ((float)e.ProgressPercentage * (float)100 / (float)uploadProgressBar.Maximum);
         uploadInfo.Text = String.Format("正在上传附件:{0}, 完成 {1:F2}%", (String)e.UserState, fProgress);
         LogTrace.TraceVerbose("Uploding file in progress, finished {0}%", fProgress);
     }
     catch (Exception ept)
     {
         LogTrace.TraceException(ept);
     }
 }
Esempio n. 5
0
        /// <summary>
        /// 替换附件为下载页面(HTML文件)
        /// </summary>
        private void ReplceAttachment(String strFileName, String strDownloadURL)
        {
            //ClientProfile profile = Globals.ThisAddIn.Profile;
            //OBSUploadManagement obsMgr = new OBSUploadManagement(Globals.ThisAddIn.WebServiceUrl);

            Outlook.Application objApplication = Globals.ThisAddIn.Application;
            Outlook.Inspector   objInspector   = objApplication.ActiveInspector();

            //替换附件到邮件中
            try
            {
                String       strTempFolder = System.Environment.GetEnvironmentVariable("TEMP");
                DownloadPage htmlPage      = new DownloadPage();
                htmlPage.FileName    = strFileName;
                htmlPage.PageContent = "<script language=\"javascript\" type=\"text/javascript\"> window.location.href='" + strDownloadURL + "'; </script>";
                String     strTempFile = strTempFolder + @"\" + htmlPage.FileName + ".htm";
                FileStream stream      = File.Create(strTempFile);

                StreamWriter sWrite = new StreamWriter(stream);
                sWrite.Write(htmlPage.PageContent);
                sWrite.Close();
                stream.Close();

                LogTrace.TraceVerbose("Create Temp file under: {0}", strTempFile);

                ((dynamic)objInspector.CurrentItem).Attachments.Add(strTempFile, Outlook.OlAttachmentType.olByValue, 1, strFileName);
                ((dynamic)objInspector.CurrentItem).Save();

                if (File.Exists(strTempFile))
                {
                    //如果存在则删除
                    File.Delete(strTempFile);
                    LogTrace.TraceVerbose("Remove Temp file under: {0}", strTempFile);
                }
            }
            catch (Exception ept)
            {
                MessageBox.Show("Add attachment failed.  " + ept.Message);
                LogTrace.TraceException(ept);
                UploadInProgress = false;
            }
        }
Esempio n. 6
0
 /// <summary>
 /// 定时器,定时获取客户端配置信息
 /// </summary>
 void TimerQueryProfile_Tick(object sender, EventArgs e)
 {
     //bool result = this.QueryProfile();
     LogTrace.TraceVerbose("Timer for Profile query triggered.");
 }
Esempio n. 7
0
        /// <summary>
        /// 选择上传的文件
        /// </summary>
        private void btSelectFile_Click(object sender, EventArgs e)
        {
            String strFilePath = null;
            String strFileName = null;


            if (Globals.ThisAddIn.m_LoadProfileSucceed == false)
            {
                logTrace.TraceInfo("Profile not cached, start first quering.");

                bool result = Globals.ThisAddIn.QueryProfile();
                if (result == false)
                {
                    MessageBox.Show("配置文件未下载成功!");
                    return;
                }
            }

            ClientProfile profile = Globals.ThisAddIn.Profile;

            OpenFileDialog dlgSelectFile = new OpenFileDialog();

            dlgSelectFile.FileName = "*.*";

            if (dlgSelectFile.ShowDialog() == DialogResult.OK)
            {
                strFilePath = dlgSelectFile.FileName;
                strFileName = dlgSelectFile.SafeFileName;
            }
            else
            {
                return;
            }

            logTrace.TraceInfo("Select file: {0}, Path: {1}, for uploading.", strFileName, strFilePath);

            Application.DoEvents();

            //去掉该声名,进度条将无法使用
            ProgressBar pb = new ProgressBar();
            //Label lb = new Label();

            //获取文件信息
            FileInfo fInfo = GetFileInfo(strFilePath, strFileName);


            logTrace.TraceVerbose("File {0} size is {1:N}", strFileName, fInfo.FileLength);

            //检查文件是否为空,或超过管理员限制大小
            if (fInfo.FileLength == 0)
            {
                MessageBox.Show("文件为空,请重新选择!");
                return;
            }
            else if (fInfo.FileLength / 1024 / 1024 > profile.MaxFileLength)
            {
                MessageBox.Show(" 上传文件大小超过管理员设定最大值(" + profile.MaxFileLength + "MB)!");
                return;
            }


            //向Web Service发送上传文件请求
            OBSUploadManagement obsMgr         = new OBSUploadManagement(Globals.ThisAddIn.m_strWebServiceUrl);
            UploadReqResponse   uploadResponse = obsMgr.RequestUploadFile(fInfo);


            //如果Web Service接收了上传请求,返回oid

            if (uploadResponse.Code == 201) // 接受上传附件
            {
                logTrace.TraceInfo("Web Server allow to upload file to OBS.");

                //初始化进度条对象
                uploadProgressBar.Minimum = 0;
                uploadProgressBar.Maximum = CaculateProgressBarMaxSize(fInfo.FileLength);
                uploadProgressBar.Value   = 0;
                uploadProgressBar.Show();
                btSelectFile.Enabled = false;

                //创建后台线程来上传附件到云盘
                m_bgwUploadFile = new BackgroundWorker();          // 实例化后台对象

                m_bgwUploadFile.WorkerReportsProgress      = true; // 设置可以通告进度
                m_bgwUploadFile.WorkerSupportsCancellation = true; // 设置可以取消

                //注册后台线程事件
                m_bgwUploadFile.DoWork             += new DoWorkEventHandler(bgwUploadFile_DoWork);
                m_bgwUploadFile.ProgressChanged    += new ProgressChangedEventHandler(bgwUploadFile_ProgressChanged);
                m_bgwUploadFile.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgwUploadFile_RunWorkerCompleted);

                //启动线程
                m_bgwUploadFile.RunWorkerAsync(new object[] { strFilePath, strFileName, uploadResponse });
                logTrace.TraceInfo("Start uploading thread for file {0}", strFileName);

                uploadInfo.Text = "准备上传附件:" + strFileName + " ,请稍后...";
            }
            else if (uploadResponse.Code == 200) //附件已经存在,不需要重新上传
            {
                //替换附件到邮件中
                logTrace.TraceInfo("File ({0}) already on OBS.", strFileName);
                ReplceAttachment(strFileName, uploadResponse.FileKey);
            }
            else //其他,请求上传附件失败
            {
                MessageBox.Show("附件上传失败,错误代码:" + uploadResponse.Code.ToString());
                logTrace.TraceError("Upload File Request Failed, ERROR Code {0}", uploadResponse.Code.ToString());
            }
        }
Esempio n. 8
0
        private Boolean SeafileLogon()
        {
            Boolean bFoundToken = false;

            string strUrl = Globals.ThisAddIn.GetSeafileURL();

            if (strUrl != null && strUrl != "" && strUrl != String.Empty)
            {
                httpClient = new WosHttpClient(strUrl);
                LogTrace.TraceInfo("Connect to Fileshare with URL: {0}", strUrl);
            }
            else
            {
                LogTrace.TraceError("Sharefile URL is empty.");
                LogTrace.TraceInfo("Turn logon off (3)");
                pbLogon.Image = global::FileToUpload.Properties.Resources.off;
                return(false);
            }

            String      strDesKey = Globals.ThisAddIn.Application.Session.CurrentUser.AddressEntry.GetExchangeUser().PrimarySmtpAddress.Substring(0, 8);
            RegistryKey regKey    = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\MICROSOFT\OFFICE\OUTLOOK\ADDINS\PinganAttachment.OutlookAddin", true);

            try
            {
                if (regKey != null)
                {
                    m_strToken = Decrypt(regKey.GetValue("token").ToString(), strDesKey);

                    if (m_strToken != null && m_strToken != String.Empty)
                    {
                        Boolean b = httpClient.ExecuteSeaFilePingRequest(m_strToken);

                        if (b)
                        {
                            LogTrace.TraceVerbose("Retrieve Token {0} from register Key.", m_strToken);
                            bFoundToken = true;
                        }
                    }
                }
                else
                {
                    bFoundToken = false;
                }
            }
            catch (Exception ept)
            {
                LogTrace.TraceException(ept);
                bFoundToken = false;
            }

            // Retrieve Token for current user
            if (!bFoundToken)
            {
                String      strLoginUser, strLoginPassword;
                LogonDialog dlg = new LogonDialog();

                DialogResult result = dlg.ShowDialog();

                if (result == DialogResult.OK)
                {
                    strLoginUser     = dlg.EmailAddress;
                    strLoginPassword = dlg.Password;

                    LogTrace.TraceVerbose("Logon user Name is {0}, password is {1}", strLoginUser, "*********");
                }
                else
                {
                    LogTrace.TraceInfo("Cancel logon");
                    LogTrace.TraceInfo("Turn logon off (4)");
                    pbLogon.Image = global::FileToUpload.Properties.Resources.off;
                    return(false);
                }

                HttpSeaFileTokenResponse rsp = httpClient.ExecuteSeaFileTokenRequest(strLoginUser, strLoginPassword);
                if (rsp != null)
                {
                    regKey.SetValue("token", Encrypt(rsp.Token, strDesKey));
                    m_strToken = rsp.Token;
                    LogTrace.TraceVerbose("Save token {0} into register key.", m_strToken);
                }
                else
                {
                    MessageBox.Show("1、如果您已是云盘用户,请输入正确的邮箱密码(开机密码)\n\r2、如果您还不是云盘用户请联系所在机构IT咨询如何申请开通,不要重复尝试登录避免邮箱帐号被锁定", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    LogTrace.TraceInfo("Turn logon off (5)");
                    pbLogon.Image = global::FileToUpload.Properties.Resources.off;
                    return(false);
                }
            }

            HttpSeaFileGetDefaultLibraryResponse gdlRsp = httpClient.ExecuteSeaFileGetDefaultLibraryRequest(m_strToken);

            if (gdlRsp != null)
            {
                m_strRepoID = gdlRsp.RepoId;
                LogTrace.TraceVerbose("Retrieve Repro Id {0}.", m_strRepoID);
                LogTrace.TraceInfo("Turn logon on (6)");
                pbLogon.Image = global::FileToUpload.Properties.Resources.on;
                return(true);
            }
            else
            {
                LogTrace.TraceError("Retrieve Repro Id failed.");
            }

            LogTrace.TraceInfo("Turn logon off (7)");
            pbLogon.Image = global::FileToUpload.Properties.Resources.off;
            return(false);
        }
Esempio n. 9
0
        /// <summary>
        /// 发送PutOid请求,并返回获得的回应
        /// </summary>
        /// <param name="oid">Wos对象标识</param>
        /// <returns>返回HttpWosPutOidResponse对象</returns>
        public HttpSeaFileGetDirectoryEntriesResponse ExecuteSeaFileGetDirectoryEntriesRequest(String strToken, String strRepoId, string strPath)
        {
            LogTrace.TraceInfo("ExecuteSeaFileGetDirectoryEntriesRequest");

            try
            {
                HttpSeaFileGetDirectoryEntriesResponse rsp = new HttpSeaFileGetDirectoryEntriesResponse();

                HttpWebRequest req = CreateSeaFileGetDirectoryEntriesRequest(strToken, strRepoId, strPath);
                if (req != null)
                {
                    HttpWebResponse res = (HttpWebResponse)req.GetResponse();

                    LogTrace.TraceInfo("Response code for GetDirectoryEntries is {0}", res.StatusCode);

                    String strResponse = String.Empty;

                    Stream       rStream = res.GetResponseStream();
                    StreamReader sr      = new StreamReader(rStream);
                    strResponse = sr.ReadToEnd();

                    LogTrace.TraceVerbose("Got Server response [{0}]", strResponse);

                    strResponse = strResponse.Replace("[", "{\"root\":[");
                    strResponse = strResponse.Replace("]", "]}");

                    LogTrace.TraceVerbose("Got Server response replace [{0}]", strResponse);

                    JObject jo    = (JObject)JsonConvert.DeserializeObject(strResponse);
                    JToken  token = (JToken)jo["root"].First;

                    while (token != null)
                    {
                        int iSize = 0;
                        if (token["type"].ToString() == "file")
                        {
                            iSize = Convert.ToInt32(token["size"].ToString());
                        }

                        rsp.AddEntry(
                            token["permission"].ToString(),
                            token["mtime"].ToString(),
                            token["type"].ToString(),
                            token["name"].ToString(),
                            token["id"].ToString(),
                            iSize);

                        token = (JToken)token.Next;
                    }

                    req.Abort();
                    res.Close();

                    return(rsp);
                }

                return(null);
            }
            catch (Exception ept)
            {
                LogTrace.TraceException(ept);
                return(null);
            }
        }