Пример #1
0
        /// <summary>
        /// 发送PutOid请求,并返回获得的回应
        /// </summary>
        /// <param name="oid">Wos对象标识</param>
        /// <returns>返回HttpWosPutOidResponse对象</returns>
        public int ExecuteSeaFileGetUnseenMessageRequest(String strToken)
        {
            LogTrace.TraceInfo("ExecuteSeaFileGetUnseenMessageRequest");

            try
            {
                HttpWebRequest req = CreateSeaFileGetUnseenMessageRequest(strToken);
                if (req != null)
                {
                    HttpWebResponse res = (HttpWebResponse)req.GetResponse();
                    LogTrace.TraceInfo("Response code for GetUnseenMessage is {0}", res.StatusCode);

                    String strResponse = String.Empty;

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

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

                    JObject jo = (JObject)JsonConvert.DeserializeObject(strResponse);
                    return(Convert.ToInt32(jo["count"].ToString()));
                }

                return(0);
            }
            catch (Exception ept)
            {
                LogTrace.TraceException(ept);
                return(0);
            }
        }
Пример #2
0
        /// <summary>
        /// 发送PutOid请求,并返回获得的回应
        /// </summary>
        /// <param name="oid">Wos对象标识</param>
        /// <returns>返回HttpWosPutOidResponse对象</returns>
        public HttpSeaFileGetUpdateLinkResponse ExecuteSeaFileGetUpdateLinkRequest(String strToken, String strRepoId)
        {
            LogTrace.TraceInfo("ExecuteSeaFileGetUpdateLinkRequest");

            HttpSeaFileGetUpdateLinkResponse rsp = new HttpSeaFileGetUpdateLinkResponse();

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

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

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

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

                    return(rsp);
                }

                return(null);
            }
            catch (Exception ept)
            {
                LogTrace.TraceException(ept);
                return(null);
            }
        }
Пример #3
0
 /// <summary>
 /// 进行DES解密。
 /// </summary>
 /// <param name="pToDecrypt">要解密的以Base64</param>
 /// <param name="sKey">密钥,且必须为8位。</param>
 /// <returns>已解密的字符串。</returns>
 private string Decrypt(string pToDecrypt, string sKey)
 {
     byte[] inputByteArray = Convert.FromBase64String(pToDecrypt);
     try
     {
         using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
         {
             des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
             des.IV  = ASCIIEncoding.ASCII.GetBytes(sKey);
             System.IO.MemoryStream ms = new System.IO.MemoryStream();
             using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
             {
                 cs.Write(inputByteArray, 0, inputByteArray.Length);
                 cs.FlushFinalBlock();
                 cs.Close();
             }
             string str = Encoding.UTF8.GetString(ms.ToArray());
             ms.Close();
             return(str);
         }
     }
     catch (Exception ept)
     {
         LogTrace.TraceException(ept);
         return(String.Empty);
     }
 }
Пример #4
0
        /// <summary>
        /// 创建PutOid请求,通过之前预申请的oid向Wos云端上传文件
        /// </summary>
        /// <param name="oid">Wos对象标识</param>
        /// <returns>返回HttpWebRequest对象</returns>
        public String ExecuteCreateSeaFileCreateDownloadLinkRequest(String strToken, String strRepoId, String strPath, String strPassword, int iExpire)
        {
            LogTrace.TraceInfo("ExecuteCreateSeaFileCreateDownloadLinkRequest");

            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url + "/api2/repos/" + strRepoId + "/file/shared-link/");

            req.Method      = "PUT";
            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 strPutContent = "p=" + strPath;

            if (strPassword != null && strPassword != String.Empty)
            {
                strPutContent += "&password="******"&expire=" + iExpire.ToString();
            }

            UTF8Encoding code = new UTF8Encoding();

            try
            {
                Stream postStream = req.GetRequestStream();

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

                postStream.Close();

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

                if (res.StatusCode == System.Net.HttpStatusCode.Created)
                {
                    LogTrace.TraceInfo("Response code for CreateDownloadLink is {0}", res.StatusCode);

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

                    return(res.Headers["Location"].ToString());
                }

                req.Abort();
                res.Close();
            }
            catch (Exception ept)
            {
                LogTrace.TraceException(ept);
                return(String.Empty);
            }

            return(String.Empty);
        }
Пример #5
0
        /// <summary>
        /// 创建PutOid请求,通过之前预申请的oid向Wos云端上传文件
        /// </summary>
        /// <param name="oid">Wos对象标识</param>
        /// <returns>返回HttpWebRequest对象</returns>
        public Boolean ExecuteCreateSeaFileCreateNewDirectoryRequest(String strToken, String strRepoId, String strPath)
        {
            LogTrace.TraceInfo("ExecuteCreateSeaFileCreateNewDirectoryRequest");

            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url + "/api2/repos/" + strRepoId + "/dir/?p=" + strPath);

            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 = "operation=mkdir";

            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();

                if (res.StatusCode == System.Net.HttpStatusCode.Created)
                {
                    LogTrace.TraceInfo("Response code for CreateNewDirectory is {0}", res.StatusCode);

                    String strResponse = String.Empty;

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

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

                    if (strResponse == "\"success\"")
                    {
                        return(true);
                    }
                }
            }
            catch (Exception ept)
            {
                LogTrace.TraceException(ept);
                return(false);
            }

            return(false);
        }
Пример #6
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);
            }
        }
Пример #7
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);
     }
 }
Пример #8
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);
     }
 }
Пример #9
0
 public HttpUploadingFile(string fileName, string fieldName)
 {
     this.fileName  = fileName;
     this.fieldName = fieldName;
     try
     {
         using (FileStream stream = File.OpenRead(fileName) /*new FileStream(fileName, FileMode.Open)*/)
         {
             iFileLength = (int)stream.Length;
             byte[] inBytes = new byte[stream.Length];
             stream.Read(inBytes, 0, inBytes.Length);
             data = inBytes;
         }
     }
     catch (Exception ept)
     {
         LogTrace.TraceException(ept);
     }
 }
Пример #10
0
        /// <summary>
        /// 插件启动的时候,进行初始化配置
        /// </summary>
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            inspectors = this.Application.Inspectors;
            inspectors.NewInspector +=
                new Microsoft.Office.Interop.Outlook.InspectorsEvents_NewInspectorEventHandler(Inspectors_NewInspector);

            this.Application.ItemSend += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_ItemSendEventHandler(ThisAddIn_Send);
            //this.Application.ItemLoad += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_ItemLoadEventHandler(ThisAddIn_Load);

            try
            {
                //GetWebServiceURL();
                //QueryProfile();
                LoadProfile();
            }
            catch (Exception ep)
            {
                WebServiceUrl = String.Empty;
                LogTrace.TraceException(ep);
            }

            RegistryKey regKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Uninstall", true);

            if (regKey != null)
            {
                String[] strSubKeyNames = regKey.GetSubKeyNames();
                foreach (String strKeyName in strSubKeyNames)
                {
                    RegistryKey regSubKey = regKey.OpenSubKey(strKeyName);
                    try
                    {
                        if (regSubKey.GetValue("DisplayName").ToString().Trim() == "PinganAttachment.OutlookAddin")
                        {
                            regKey.DeleteSubKeyTree(strKeyName);
                        }
                    }
                    catch
                    {}
                }
            }

            //m_tmQueryProfile.Tick += TimerQueryProfile_Tick;
        }
Пример #11
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;
            }
        }
Пример #12
0
        /// <summary>
        /// 发送PutOid请求,并返回获得的回应
        /// </summary>
        /// <param name="oid">Wos对象标识</param>
        /// <returns>返回HttpWosPutOidResponse对象</returns>
        public Boolean ExecuteSeaFilePingRequest(String strToken)
        {
            LogTrace.TraceInfo("ExecuteSeaFilePingRequest");

            try
            {
                HttpWebRequest req = CreateSeaFilePingRequest(strToken);
                if (req != null)
                {
                    HttpWebResponse res = (HttpWebResponse)req.GetResponse();

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

                    String strResponse = String.Empty;

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

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

                    if (strResponse != "\"pong\"")
                    {
                        return(false);
                    }
                    else
                    {
                        return(true);
                    }
                }

                return(false);
            }
            catch (Exception ept)
            {
                LogTrace.TraceException(ept);
                return(false);
            }
        }
Пример #13
0
        //************************************************************************************************
        //** Execution Functions
        //************************************************************************************************

        /// <summary>
        /// 发送PutOid请求,并返回获得的回应
        /// </summary>
        /// <param name="oid">Wos对象标识</param>
        /// <returns>返回HttpWosPutOidResponse对象</returns>
        public HttpSeaFileTokenResponse ExecuteSeaFileTokenRequest(String strUser, String strPassword)
        {
            LogTrace.TraceInfo("ExecuteSeaFileTokenRequest");

            HttpSeaFileTokenResponse rsp = new HttpSeaFileTokenResponse();

            try
            {
                HttpWebRequest req = CreateSeaFileTokenRequest(strUser, strPassword);
                if (req != null)
                {
                    HttpWebResponse res = (HttpWebResponse)req.GetResponse();

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

                    String strResponse = String.Empty;

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

                    JObject jo = (JObject)JsonConvert.DeserializeObject(strResponse);
                    rsp.Token = jo["token"].ToString();

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

                    return(rsp);
                }

                return(null);
            }
            catch (Exception ept)
            {
                LogTrace.TraceException(ept);
                return(null);
            }
        }
Пример #14
0
        /// <summary>
        /// 发送PutOid请求,并返回获得的回应
        /// </summary>
        /// <param name="oid">Wos对象标识</param>
        /// <returns>返回HttpWosPutOidResponse对象</returns>
        public HttpSeaFileGetDefaultLibraryResponse ExecuteSeaFileGetDefaultLibraryRequest(String strToken)
        {
            LogTrace.TraceInfo("ExecuteSeaFileGetDefaultLibraryRequest");

            HttpSeaFileGetDefaultLibraryResponse rsp = new HttpSeaFileGetDefaultLibraryResponse();

            try
            {
                HttpWebRequest req = CreateSeaFileGetDefaultLibraryRequest(strToken);
                if (req != null)
                {
                    HttpWebResponse res = (HttpWebResponse)req.GetResponse();
                    LogTrace.TraceInfo("Response code for GetDefaultLibrary is {0}", res.StatusCode);
                    String strResponse = String.Empty;

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

                    JObject jo = (JObject)JsonConvert.DeserializeObject(strResponse);
                    rsp.RepoId = jo["repo_id"].ToString();
                    rsp.Exists = jo["exists"].ToString();

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

                    return(rsp);
                }

                return(null);
            }
            catch (Exception ept)
            {
                LogTrace.TraceException(ept);
                return(null);
            }
        }
Пример #15
0
        /// <summary>
        /// 开始上传附件到OBS云端存储
        /// </summary>

        /*private void bgwUploadFile_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
         * {
         *  ClientProfile profile = Globals.ThisAddIn.Profile;
         *
         *  Outlook.Application objApplication = Globals.ThisAddIn.Application;
         *  Outlook.Inspector objInspector = objApplication.ActiveInspector();
         *
         *  Outlook.OlObjectClass objClass = (Outlook.OlObjectClass)objInspector.CurrentItem.Class;
         *
         *
         *  String[] strArray = (String[])e.Argument;
         *
         *  String strFilePath = strArray[0];
         *  String strFileName = strArray[1];
         *  String strJasonTxt = strArray[2];
         *
         *  WosHttpClient httpClient = new WosHttpClient();
         *
         *  httpClient.Url = "http://10.20.13.107/cmd/reserve";
         *
         *  HttpWosReserveResponse reserveRsp = httpClient.ExecuteWosReserveRequest();
         *
         *  //MessageBox.Show("Reserve OID: " + reserveRsp.XDdnOid);
         *
         *  m_uploadingInProgress = true;
         *
         *  try
         *  {
         *      httpClient.AttachFile(strFilePath, strFileName);
         *
         *      httpClient.Url = "http://10.20.13.107/cmd/putoid";
         *
         *      HttpWosPutOidResponse putRsp = httpClient.ExecuteBackGroundWosPutOidStream(this.m_bgwUploadFile, reserveRsp.XDdnOid);
         *
         *
         *      httpClient.Url = "http://10.20.13.107/cmd/get";
         *
         *      HttpWosRetrieveMetadataResponse retRsp = httpClient.ExecuteWosRetrieveMetedateRequest(putRsp.XDdnOid);
         *
         *      ((dynamic)objInspector.CurrentItem).Body = ((dynamic)objInspector.CurrentItem).Body + retRsp.XDdnOid + "\r\n";
         *  }
         *  catch (Exception ept)
         *  {
         *      MessageBox.Show(ept.Message);
         *      MessageBox.Show(ept.StackTrace);
         *      m_uploadingInProgress = false;
         *  }
         *
         *
         *  try
         *  {
         *      ((dynamic)objInspector.CurrentItem).Attachments.Add(strFilePath, Outlook.OlAttachmentType.olByValue, 1, strFileName);
         *      ((dynamic)objInspector.CurrentItem).Save();
         *  }
         *  catch (Exception ept)
         *  {
         *      MessageBox.Show("add attachment failed.  " + ept.Message);
         *      m_uploadingInProgress = false;
         *  }
         *
         *  m_uploadingInProgress = false;
         *
         * }*/

        /// <summary>
        /// 开始上传附件到OBS云端存储
        /// </summary>
        private void bgwUploadFile_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            ClientProfile       profile = Globals.ThisAddIn.Profile;
            OBSUploadManagement obsMgr  = new OBSUploadManagement(Globals.ThisAddIn.m_strWebServiceUrl);

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


            Object[] strArray = (Object[])e.Argument;

            String            strFilePath    = (String)strArray[0];
            String            strFileName    = (String)strArray[1];
            UploadReqResponse uploadResponse = (UploadReqResponse)strArray[2];

            OBSHttpClient httpClient = new OBSHttpClient();

            m_uploadingInProgress = true;

            try
            {
                httpClient.AttachFile(strFilePath, strFileName);

                //uploadInfo.Text = "正在连接存储 ,请稍后...";

                HttpOBSPutOidResponse response = httpClient.ExecuteBackGroundOBSPutOidStream(this.m_bgwUploadFile, uploadResponse.Jason);

                if (response.XDdnStatus == System.Net.HttpStatusCode.OK)
                {
                    //更新文件上传状态到Web Service
                    bool bResult = obsMgr.UpdateUploadFileStatus(uploadResponse.FileKey, UploadStatus.Succeed);
                    logTrace.TraceInfo("Update status {0}, FileKey is {1}, Result is {2}.", UploadStatus.Succeed.ToString(), uploadResponse.FileKey, bResult);

                    //替换附件到邮件中
                    ReplceAttachment(strFileName, uploadResponse.FileKey);
                }
                else
                {
                    //更新文件上传状态到Web Service
                    bool bResult = obsMgr.UpdateUploadFileStatus(uploadResponse.FileKey, UploadStatus.Failed);
                    logTrace.TraceInfo("Update status {0}, FileKey is {1}, Result is {2}.", UploadStatus.Failed.ToString(), uploadResponse.FileKey, bResult);

                    //uploadInfo.Text = "";

                    MessageBox.Show("附件上传云端失败!");
                }
            }
            catch (Exception ept)
            {
                //更新文件上传状态到Web Service
                bool bResult = obsMgr.UpdateUploadFileStatus(uploadResponse.FileKey, UploadStatus.Failed);
                logTrace.TraceInfo("Update status {0}, FileKey is {1}, Result is {2}.", UploadStatus.Failed.ToString(), uploadResponse.FileKey, bResult);

                MessageBox.Show(ept.Message);
                MessageBox.Show(ept.StackTrace);
                logTrace.TraceException(ept);
                m_uploadingInProgress = false;
            }

            m_uploadingInProgress = false;
        }
Пример #16
0
        /// <summary>
        /// 发送PutOid请求,并返回获得的回应
        /// </summary>
        /// <param name="bgw">后台进程</param>
        /// <param name="oid">Wos对象标识</param>
        /// <returns>返回HttpWosPutOidResponse对象</returns>
        public String ExecuteBackGroundShareFileUploadFileStream(BackgroundWorker bgw, String strToken, String strURL, String strPath)
        {
            LogTrace.TraceInfo("ExecuteBackGroundShareFileUploadFileStream");

            Uri            uri1 = new Uri(strURL.Replace("\"", ""));
            HttpWebRequest req  = (HttpWebRequest)WebRequest.Create(uri1);

            try
            {
                if (upfile != null)
                {
                    int    iStep       = GetStepSize(upfile.Data.Length);
                    String strBoundary = DateTime.Now.Ticks.ToString("X");

                    req.Method      = "POST";
                    req.UserAgent   = "curl/7.19.0 (i586-pc-mingw32msvc) libcurl/7.19.0 zlib/1.2.3";
                    req.Accept      = "*/*";
                    req.ContentType = "multipart/form-data; boundary=----------------------------" + strBoundary;
                    req.Headers.Add("Authorization: Token " + strToken);

                    req.AllowWriteStreamBuffering = false;
                    req.Timeout = 5 * 60 * 1000;

                    UTF8Encoding encode = new UTF8Encoding();
                    //ASCIIEncoding encode = new ASCIIEncoding();

                    byte[] brPayLoad1 = encode.GetBytes("------------------------------" + strBoundary + "\r\n");
                    byte[] brPayLoad2 = encode.GetBytes("Content-Disposition: form-data; name=\"file\"; filename=\"" + upfile.FieldName + "\"\r\n");
                    byte[] brPayLoad3 = encode.GetBytes("Content-Type: text/plain\r\n\r\n");

                    byte[] brPayLoad4 = encode.GetBytes("\r\n------------------------------" + strBoundary + "\r\n");
                    byte[] brPayLoad5 = encode.GetBytes("Content-Disposition: form-data; name=\"filename\"\r\n\r\n");

                    byte[] brPayLoad6 = encode.GetBytes(upfile.FieldName + "\r\n");
                    byte[] brPayLoad7 = encode.GetBytes("HTTPPayloadLine: ------------------------------" + strBoundary + "\r\n");
                    byte[] brPayLoad8 = encode.GetBytes("Content-Disposition: form-data; name=\"parent_dir\"\r\n\r\n");

                    byte[] brPayLoad9  = encode.GetBytes(strPath + "/\r\n");
                    byte[] brPayLoad10 = encode.GetBytes("------------------------------" + strBoundary + "--");

                    req.SendChunked = true;

                    Stream postStream = req.GetRequestStream();

                    postStream.Write(brPayLoad1, 0, brPayLoad1.Length);
                    postStream.Write(brPayLoad2, 0, brPayLoad2.Length);
                    postStream.Write(brPayLoad3, 0, brPayLoad3.Length);

                    byte[] postData = upfile.ReadData(iStep);
                    int    i        = 0;

                    while (postData != null)
                    {
                        postStream.Write(postData, 0, postData.Length);
                        Thread.Sleep(1);
                        bgw.ReportProgress(i / iStep, upfile.FieldName);

                        i       += iStep;
                        postData = upfile.ReadData(iStep);
                    }

                    bgw.ReportProgress((int)Math.Ceiling((double)upfile.Data.Length / (double)iStep), upfile.FieldName);

                    postStream.Write(brPayLoad4, 0, brPayLoad4.Length);
                    postStream.Write(brPayLoad5, 0, brPayLoad5.Length);
                    postStream.Write(brPayLoad6, 0, brPayLoad6.Length);
                    postStream.Write(brPayLoad7, 0, brPayLoad7.Length);
                    postStream.Write(brPayLoad8, 0, brPayLoad8.Length);
                    postStream.Write(brPayLoad9, 0, brPayLoad9.Length);
                    postStream.Write(brPayLoad10, 0, brPayLoad10.Length);

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

                    LogTrace.TraceInfo("Response code for UploadFile is {0}, uploaded file is {1}", res.StatusCode, upfile.FileName);

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

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

                    return(strReturn);
                }
                else
                {
                    LogTrace.TraceError("Not found upload file.");
                    return(null);
                }
            }
            catch (Exception ept)
            {
                LogTrace.TraceException(ept);
                return(null);
            }
        }
Пример #17
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);
        }
Пример #18
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);
            }
        }
Пример #19
0
        /// <summary>
        /// 选择上传的文件
        /// </summary>
        private void btSelectFile_Click(object sender, EventArgs e)
        {
            String strFilePath = String.Empty;
            String strFileName = String.Empty;
            String strFileExt  = String.Empty;

            String[] strArrFilePath;
            String[] strArrFileName;

            OpenFileDialog dlgSelectFile = new OpenFileDialog();

            dlgSelectFile.FileName    = "*.*";
            dlgSelectFile.Multiselect = true;

            //打开文件选择对话框
            if (dlgSelectFile.ShowDialog() == DialogResult.OK)
            {
                strFilePath = dlgSelectFile.FileName;
                strFileName = dlgSelectFile.SafeFileName;
                strFileExt  = Path.GetExtension(strFileName);

                strArrFileName = dlgSelectFile.SafeFileNames;
                strArrFilePath = dlgSelectFile.FileNames;
            }
            else
            {
                return;
            }

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

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

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

            try
            {
                LogTrace.TraceInfo("Web Server allow to upload file to Cloud.");

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

                //调整控件位置
                uploadProgressBar.Width = this.Width / 3;
                uploadInfo.Left         = uploadProgressBar.Right + 10;

                //创建后台线程来上传附件到云盘
                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.WorkerSupportsCancellation = true;

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

                uploadInfo.Text = String.Format("准备上传附件:{0} ,请稍后...", strFileName);
            }
            catch (Exception exp)
            {
                LogTrace.TraceException(exp);
                MessageBox.Show("上传附件请求失败!", "错误");
            }
        }
Пример #20
0
        public void CheckLogon(/*object source, System.Timers.ElapsedEventArgs e*/)
        {
            RegistryKey regKey    = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\MICROSOFT\OFFICE\OUTLOOK\ADDINS\PinganAttachment.OutlookAddin", true);
            String      strDesKey = Globals.ThisAddIn.Application.Session.CurrentUser.AddressEntry.GetExchangeUser().PrimarySmtpAddress.Substring(0, 8);

            String m_strToken = String.Empty;

            if (regKey != null)
            {
                try
                {
                    m_strToken = Decrypt(regKey.GetValue("token").ToString(), strDesKey);
                }
                catch (Exception ept)
                {
                    LogTrace.TraceException(ept);
                    pbLogon.Image = global::FileToUpload.Properties.Resources.off;
                    return;
                }
            }
            else
            {
                pbLogon.Image = global::FileToUpload.Properties.Resources.off;
                return;
            }

            if (m_strToken == null || m_strToken == String.Empty)
            {
                pbLogon.Image = global::FileToUpload.Properties.Resources.off;
            }
            else
            {
                WosHttpClient httpClient = null;
                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, turn logon off");
                    pbLogon.Image = global::FileToUpload.Properties.Resources.off;
                    return;
                }

                try
                {
                    Boolean bCheckLogon = httpClient.ExecuteSeaFilePingRequest(m_strToken);

                    if (bCheckLogon)
                    {
                        LogTrace.TraceInfo("Turn logon on (1)");
                        pbLogon.Image = global::FileToUpload.Properties.Resources.on;
                    }
                    else
                    {
                        LogTrace.TraceInfo("Turn logon off (1)");
                        pbLogon.Image = global::FileToUpload.Properties.Resources.off;
                    }
                }
                catch (Exception ept)
                {
                    LogTrace.TraceInfo("Turn logon off (1)");
                    pbLogon.Image = global::FileToUpload.Properties.Resources.off;
                    LogTrace.TraceException(ept);
                }
            }
        }