Esempio n. 1
0
        private void btSelectShareFile_Click(object sender, EventArgs e)
        {
            String strSelectedFile = String.Empty;

            ShareFileSelectDialog dlgFileSelect = new ShareFileSelectDialog();

            if (dlgFileSelect.ShowDialog() == DialogResult.OK)
            {
                strSelectedFile = dlgFileSelect.strSelectedFile;
            }
            else
            {
                //MessageBox.Show("读取网盘数据失败!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            String[] strArrSelectedFile = strSelectedFile.Split(';');

            if (!SeafileLogon())
            {
                LogTrace.TraceError("Fileshare logon failed.");
                return;
            }

            foreach (String strFile in strArrSelectedFile)
            {
                String strDownloadLink = httpClient.ExecuteCreateSeaFileCreateDownloadLinkRequest(m_strToken, m_strRepoID, strFile, Globals.ThisAddIn.GetShareFilePassword(), Globals.ThisAddIn.GetExpireDates());
                String strFileName     = strFile.Substring(strFile.LastIndexOf("/"));

                if (strDownloadLink != null && strDownloadLink != "" && strDownloadLink != string.Empty)
                {
                    ReplceAttachment(strFileName, strDownloadLink);

                    LogTrace.TraceInfo("Fileshare replace file {0} with Link {1} Expire time {2}", strFileName, strDownloadLink, Globals.ThisAddIn.GetExpireDates());
                }
                else
                {
                    MessageBox.Show("文件(" + strFileName + ")下载链接获取失败");
                    LogTrace.TraceError("Retrieve file {0} download link failed", strFileName);
                }
            }
        }
Esempio n. 2
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. 3
0
        /// <summary>
        /// 开始上传附件到OBS云端存储
        /// </summary>
        private void bgwUploadFile_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            if (m_bRegisterWindowClose == false)
            {
                ((Outlook.ItemEvents_10_Event)(dynamic) Globals.ThisAddIn.Application.ActiveInspector().CurrentItem).Close +=
                    new Microsoft.Office.Interop.Outlook.ItemEvents_10_CloseEventHandler(MailItem_Close);

                m_bRegisterWindowClose = true;
            }

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

            //获取入参
            Object[] objArray = (Object[])e.Argument;

            String[] strArrFilePath = (String[])objArray[0];
            String[] strArrFileName = (String[])objArray[1];


            if (!SeafileLogon())
            {
                LogTrace.TraceError("Seafile Logon failed.");
                return;
            }

            UploadInProgress = true;

            for (int i = 0; i < strArrFilePath.Count <String>(); i++)
            {
                String strFilePath = strArrFilePath[i];
                String strFileName = strArrFileName[i];

                LogTrace.TraceInfo("Start upload file {0} : {1}", strFileName, strFilePath);

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

                if (fInfo.FileLength > Globals.ThisAddIn.GetMaxFileSize() * 1024 * 1024)
                {
                    MessageBox.Show("文件" + strFileName + "大小超过管理员规定(" + Globals.ThisAddIn.GetMaxFileSize().ToString() + ")", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    break;
                }

                if (uploadProgressBar.InvokeRequired)
                {
                    uploadProgressBar.Invoke(new MethodInvoker(delegate
                    {
                        uploadProgressBar.Minimum = 0;
                        uploadProgressBar.Maximum = CaculateProgressBarMaxSize(fInfo.FileLength);
                        uploadProgressBar.Value   = 0;

                        LogTrace.TraceInfo("Reset ProgressBar bar, Min {0} Max {1} value {2}", uploadProgressBar.Minimum, uploadProgressBar.Maximum, uploadProgressBar.Value);
                    }));
                }

                if (!m_bUploadFolder)
                {
                    HttpSeaFileGetDirectoryEntriesResponse gdeRsp = httpClient.ExecuteSeaFileGetDirectoryEntriesRequest(m_strToken, m_strRepoID, "/" + m_strDefaultUploadFolder);

                    if (gdeRsp == null)
                    {
                        m_bUploadFolder = httpClient.ExecuteCreateSeaFileCreateNewDirectoryRequest(m_strToken, m_strRepoID, "/" + m_strDefaultUploadFolder);
                    }
                }

                HttpSeaFileGetUpdateLinkResponse gulDlg = httpClient.ExecuteSeaFileGetUpdateLinkRequest(m_strToken, m_strRepoID);

                if (gulDlg != null)
                {
                    //upload File to ShareFile
                    httpClient.AttachFile(strFilePath, strFileName);
                    String strResult = httpClient.ExecuteBackGroundShareFileUploadFileStream(m_bgwUploadFile, m_strToken, gulDlg.URL, "/" + m_strDefaultUploadFolder);
                    if (strResult == null || strResult == String.Empty)
                    {
                        MessageBox.Show("上传文件 " + strFileName + " 失败!");
                        LogTrace.TraceError("Upload file {0} failed.", strFileName);
                    }
                    else
                    {
                        String strDownloadLink = httpClient.ExecuteCreateSeaFileCreateDownloadLinkRequest(m_strToken, m_strRepoID, "/" + m_strDefaultUploadFolder + "/" + strFileName, "", 0);

                        if (strDownloadLink != null && strDownloadLink != "" && strDownloadLink != String.Empty)
                        {
                            LogTrace.TraceInfo("Replace attachment {0} with Link {1}", strFileName, strDownloadLink);
                            ReplceAttachment(strFileName, strDownloadLink);
                        }
                        else
                        {
                            MessageBox.Show("文件(" + strFileName + ")下载链接获取失败");
                            LogTrace.TraceError("Get Download Link for file {0} is empty", strFileName);
                        }
                    }
                }
                else
                {
                    LogTrace.TraceError("Retrieve Upload URL failed.");
                }
            }

            UploadInProgress = false;
        }
Esempio n. 4
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. 5
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);
                }
            }
        }
Esempio n. 6
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);
            }
        }