/// <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); } }
/// <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); } }
/// <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); } }
/// <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); }
/// <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); }
/// <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); } }
/// <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); } }
/// <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); } }
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); } }
/// <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; }
/// <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; } }
/// <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); } }
//************************************************************************************************ //** 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); } }
/// <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); } }
/// <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; }
/// <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); } }
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); }
/// <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); } }
/// <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("上传附件请求失败!", "错误"); } }
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); } } }