コード例 #1
0
        /// <summary>
        /// 文件下载(返回Base64)
        /// </summary>
        /// <returns>文件Base64</returns>
        public DownloadFileRes DownloadFileBase64(OpenFileModel model)
        {
            DownloadFileRes downloadFile = new DownloadFileRes();

            try
            {
                var downloadRes = GetDownloadFileStream(model);
                if (downloadRes.ErrorCode > 0)
                {
                    downloadFile.ErrorCode   = downloadRes.ErrorCode;
                    downloadFile.ErrorDetail = downloadRes.ErrorDetail;
                    return(downloadFile);
                }

                using (MemoryStream memstream = new MemoryStream())
                {
                    const int bufferLen = 10 * 1024 * 1024;
                    byte[]    buffer    = new byte[bufferLen];
                    int       count     = 0;
                    while ((count = downloadRes.Stream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        memstream.Write(buffer, 0, count);
                    }
                    downloadFile.FileValue = Convert.ToBase64String(memstream.ToArray());
                }
                downloadFile.ErrorCode = 0;
                return(downloadFile);
            }
            catch (Exception ex)
            {
                _log.Debug($"DownloadFileBase64 Exception: {ex.Message}");
                throw ex;
            }
        }
コード例 #2
0
        public void DownloadFileBase64()
        {
            OpenFileModel model = new OpenFileModel()
            {
                DocType = "word",
                FileId  = TestData.fileId,
                Rev     = null,
                TokenId = TestData.access_token
            };
            var res = helper.DownloadFileBase64(model);

            Assert.IsNotNull(res);
        }
コード例 #3
0
        public void FileDownload()
        {
            OpenFileModel model = new OpenFileModel()
            {
                DocType = "word",
                FileId  = TestData.fileId,
                Rev     = null,
                TokenId = TestData.access_token
            };
            var savePath = $"{AppDomain.CurrentDomain.BaseDirectory}\\{Guid.NewGuid()}";
            var res      = helper.FileDownload(model, savePath);

            Assert.IsNotNull(res);
        }
コード例 #4
0
        /// <summary>
        /// 文件下载(返回路径)
        /// </summary>
        /// <returns>文件路径</returns>
        public DownloadFileRes FileDownload(OpenFileModel model, string savePath)
        {
            DownloadFileRes downloadFile = new DownloadFileRes();

            try
            {
                var downloadRes = GetDownloadFileStream(model);
                if (downloadRes.ErrorCode > 0)
                {
                    downloadFile.ErrorCode   = downloadRes.ErrorCode;
                    downloadFile.ErrorDetail = downloadRes.ErrorDetail;
                    return(downloadFile);
                }

                if (!string.IsNullOrEmpty(model.Rev))
                {
                    savePath = $"{savePath}\\{model.Rev}";
                }
                //如果不存在,创建它
                if (!Directory.Exists(savePath))
                {
                    Directory.CreateDirectory(savePath);
                }
                // 文件全路径
                string filePath = $"{savePath}\\{downloadRes.FileName}";

                //写入数据
                using (FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate))
                {
                    const int bufferLen = 10 * 1024 * 1024;

                    byte[] buffer = new byte[bufferLen];
                    int    count  = 0;
                    while ((count = downloadRes.Stream.Read(buffer, 0, bufferLen)) > 0)
                    {
                        fs.Write(buffer, 0, count);
                    }
                    fs.Dispose();
                }
                downloadFile.FileValue = filePath;
                downloadFile.ErrorCode = 0;
                return(downloadFile);
            }
            catch (Exception ex)
            {
                _log.Debug($"FileDownload Exception: {ex.Message}");
                throw ex;
            }
        }
コード例 #5
0
        public void OpenFileFromServer()
        {
            WordController controller = new WordController();

            OpenFileModel openFileModel = new OpenFileModel()
            {
                DocType = "word",
                FileId  = TestData.fileId,
                Rev     = null,
                TokenId = TestData.access_token
            };
            JsonResult result = controller.OpenFileFromServer(openFileModel);

            Assert.IsNotNull(result.Data);
        }
コード例 #6
0
        public void ImportRoute()
        {
            var openFile = new OpenFileModel();

            openFile.CheckFileExists  = true;
            openFile.InitialDirectory = Settings.DataPath;
            openFile.Filter           = "ttt files|*.ttt|All Files|*.*";
            openFile.Title            = "Open exported database file";
            var path = FileIOHelper.GetOpenFileName(openFile);

            if (path.Length > 0)
            {
                var importRoute = new ImportRouteDataAccess(path);
                RouteList = new BindableCollection <RouteModel>(RouteDataAccess.GetAllRoutes());
                NotifyOfPropertyChange(() => RouteList);
            }
        }
コード例 #7
0
        public void OpenFileModelTest()
        {
            OpenFileModel openFileModel = new OpenFileModel()
            {
                DocType = "DocType",
                FileId  = "FileId",
                Rev     = "Rev",
                TokenId = "TokenId"
            };
            var DocType = openFileModel.DocType;
            var FileId  = openFileModel.FileId;
            var Rev     = openFileModel.Rev;
            var TokenId = openFileModel.TokenId;

            Assert.IsTrue(FileId == "FileId");
            Assert.IsTrue(DocType == "DocType");
            Assert.IsTrue(Rev == "Rev");
            Assert.IsTrue(TokenId == "TokenId");
        }
コード例 #8
0
ファイル: ProcessUtils.cs プロジェクト: a13782425/EasyOpen
        /// <summary>
        /// 打开文件
        /// </summary>
        /// <param name="path">文件路径</param>
        /// <param name="isOpenNew">是否打开新的</param>
        public void OpenFile(string path, bool isOpenNew = false)
        {
            lock (LOCK_OBJ)
            {
                if (!isOpenNew)
                {
                    CheckHWND(path);
                    int prt = FileIsOpens(path);
                    if (prt == 0)
                    {
                        goto End;
                    }
                    return;
                }

                End : OpenFileModel openFileModel = new OpenFileModel();
                openFileModel.Path = path;
                try
                {
                    openFileModel.CurrentProcess = Process.Start(path);
                    if (openFileModel.CurrentProcess == null)
                    {
                        return;
                    }
                    openFileModel.CurrentProcess.WaitForInputIdle();
                    DataUtils.OpenFileModelList.Add(openFileModel);
                }
                catch (Exception ex)
                {
                    MainWindow.Instance.Dispatcher.Invoke(new MainThreadDelegate(() =>
                    {
                        MahApps.Metro.Controls.Dialogs.DialogManager.ShowModalMessageExternal(MainWindow.Instance, "开启应用失败", "没有应用程序与此操作的指定文件有关联");
                    }));
                    return;
                }
            }
        }
コード例 #9
0
        public static string GetOpenFileName(OpenFileModel openFileParams)
        {
            OpenFileDialog dialog = new OpenFileDialog();

            dialog.CheckFileExists  = openFileParams.CheckFileExists;
            dialog.CheckPathExists  = openFileParams.CheckPathExists;
            dialog.CustomPlaces     = openFileParams.CustomPlaces;
            dialog.DefaultExt       = openFileParams.DefaultExt;
            dialog.DereferenceLinks = openFileParams.DereferenceLinks;
            dialog.FileName         = openFileParams.FileName;
            // FileNames not supported!
            dialog.Filter           = openFileParams.Filter;
            dialog.FilterIndex      = openFileParams.FilterIndex;
            dialog.InitialDirectory = openFileParams.InitialDirectory;
            dialog.Title            = openFileParams.Title;
            if (dialog.ShowDialog() == true)
            {
                openFileParams.FileName      = dialog.FileName;
                openFileParams.SafeFileName  = dialog.SafeFileName;
                openFileParams.SafeFileNames = dialog.SafeFileNames;
                return(dialog.FileName);
            }
            return("");
        }
コード例 #10
0
        /// <summary>
        /// GetDownloadFileStream
        /// </summary>
        /// <param name="model">OpenFileModel</param>
        /// <param name="fileName">fileName</param>
        /// <returns>FileStream</returns>
        private DownloadRes GetDownloadFileStream(OpenFileModel model)
        {
            DownloadRes downloadRes = new DownloadRes();
            string      resStr      = string.Empty;
            var         handler     = new WebRequestHandler();

            handler.ServerCertificateValidationCallback = delegate { return(true); };
            using (var httpClient = new HttpClient(handler))
            {
                httpClient.DefaultRequestHeaders.Add("Authorization", model.TokenId);

                var json = "{\"docid\":\"" + model.FileId + "\"}";
                if (!string.IsNullOrEmpty(model.Rev))
                {
                    json = "{\"docid\":\"" + model.FileId + "\",\"rev\":\"" + model.Rev + "\"}";
                }
                var content = new StringContent(json, Encoding.UTF8, "application/json");
                var res     = httpClient.PostAsync($"{Constant.OAuth2Url}/api/efast/v1/file/osdownload", content).Result;
                resStr = res.Content.ReadAsStringAsync().Result;


                int resCode = (int)res.StatusCode;
                // 若为错误返回码则抛出异常
                if (resCode < 200 || resCode >= 300)
                {
                    var errModel = JsonConvert.DeserializeObject <ErrorModel>(resStr);
                    _log.Debug($"GetDownloadFileStream Exception: {errModel.cause}, Code: {errModel.code}");
                    downloadRes.ErrorCode   = errModel.code;
                    downloadRes.ErrorDetail = JsonConvert.SerializeObject(errModel.detail);
                    return(downloadRes);
                }
            }

            var    dynamicObj = JsonConvert.DeserializeObject <dynamic>(resStr);
            string method     = dynamicObj["authrequest"][0].Value;
            string url        = dynamicObj["authrequest"][1].Value;

            downloadRes.FileName = dynamicObj["name"].Value;

            List <string> headers = new List <string>();

            for (int i = 2; i < dynamicObj["authrequest"].Count; ++i)
            {
                headers.Add(dynamicObj["authrequest"][i].Value);
            }

            OSSAPIHelper    ossHttpHelper = new OSSAPIHelper();
            HttpWebResponse ossResult     = ossHttpHelper.SendReqToOSS(method, url, headers, null);

            downloadRes.Stream = ossResult.GetResponseStream();

            int oosCode = (int)ossResult.StatusCode;

            // 若为错误返回码则抛出异常
            if (oosCode < 200 || oosCode >= 300)
            {
                string errBody = string.Empty;
                using (StreamReader reader = new StreamReader(downloadRes.Stream, Encoding.UTF8))
                {
                    errBody = reader.ReadToEnd();
                }
                var errModel = JsonConvert.DeserializeObject <ErrorModel>(errBody);
                _log.Debug($"UploadFile SendReqToOSS Exception: {errModel.cause}");
                downloadRes.ErrorCode   = errModel.code;
                downloadRes.ErrorDetail = JsonConvert.SerializeObject(errModel.detail);
            }
            return(downloadRes);
        }
コード例 #11
0
        public ContentResult CompareFileFromServer()
        {
            // 文件临时路径
            string savePath = string.Empty;

            try
            {
                _log.Debug("CompareFileFromServer Start");

                var guid = Request.Form["Guid"];
                // 文件路径
                savePath = $"{AppDomain.CurrentDomain.BaseDirectory}\\App_Data\\{guid}";

                // 本地文件
                var localFilePath = Path.Combine(savePath, $"{guid}.docx");

                // 下载指定版本文件
                OpenFileModel downloadReq = new OpenFileModel()
                {
                    TokenId = CommonHelper.GetToken(Request.Form["TokenId"]),
                    FileId  = CommonHelper.DecodeUrl(Request.Form["Docid"]),
                    Rev     = CommonHelper.DecodeUrl(Request.Form["Rev"])
                };
                IAS7APIHelper helper       = new AS7APIHelper();
                var           downloadFile = helper.FileDownload(downloadReq, savePath);
                if (downloadFile.ErrorCode > 0)
                {
                    return(new ContentResult
                    {
                        Content = JsonConvert.SerializeObject(new JsonModel {
                            Success = true, StatusCode = downloadFile.ErrorCode, Message = downloadFile.ErrorDetail
                        }),
                        ContentType = "application/json"
                    });
                }

                // 对比文件路径
                var cFilePath = OfficeHelper.CompareFile(downloadFile.FileValue, localFilePath, savePath);

                // 获取对比文件Base64 返回前台进行显示
                string base64String = CommonHelper.GetBase64FormPath(cFilePath);
                _log.Debug("CompareFileFromServer End");

                return(new ContentResult
                {
                    Content = new JavaScriptSerializer {
                        MaxJsonLength = Int32.MaxValue
                    }.Serialize(new JsonModel {
                        Success = true, Data = base64String
                    }),
                    ContentType = "application/json"
                });
            }
            catch (Exception ex)
            {
                _log.Debug($"CompareFileFromServer Exception: {ex.Message}");
                return(new ContentResult
                {
                    Content = JsonConvert.SerializeObject(new JsonModel {
                        Success = false, Message = ex.Message
                    }),
                    ContentType = "application/json"
                });
            }
            finally
            {
                DeletePath(savePath);
            }
        }
コード例 #12
0
        public ContentResult OpenFileFromServer(OpenFileModel model)
        {
            string savePath = string.Empty;

            try
            {
                _log.Debug("OpenFileFromServer Start");
                model.TokenId = CommonHelper.GetToken(model.TokenId);

                IAS7APIHelper helper = new AS7APIHelper();

                // 文件临时路径
                savePath = $"{AppDomain.CurrentDomain.BaseDirectory}\\App_Data\\{Guid.NewGuid()}";

                // 文件下载
                var downloadFile = helper.FileDownload(model, savePath);
                if (downloadFile.ErrorCode > 0)
                {
                    return(new ContentResult
                    {
                        Content = JsonConvert.SerializeObject(new JsonModel {
                            Success = true, StatusCode = downloadFile.ErrorCode, Message = downloadFile.ErrorDetail
                        }),
                        ContentType = "application/json"
                    });
                }
                // 文件下载路径
                string downloadFilePath = downloadFile.FileValue;

                // 设置文件标识
                if (string.Equals("word", model.DocType, StringComparison.CurrentCultureIgnoreCase))
                {
                    OfficeHelper.SetWordFileID(ref downloadFilePath, model.FileId);
                }
                else if (string.Equals("excel", model.DocType, StringComparison.CurrentCultureIgnoreCase))
                {
                    OfficeHelper.SetExcelFileID(downloadFilePath, model.FileId);
                }
                else if (string.Equals("ppt", model.DocType, StringComparison.CurrentCultureIgnoreCase))
                {
                    //OfficeHelper.SetPPTFileID(downloadFilePath, model.FileId);
                }

                // 读取文件流
                string base64String = CommonHelper.GetBase64FormPath(downloadFilePath);
                _log.Debug("OpenFileFromServer End");

                return(new ContentResult
                {
                    Content = new JavaScriptSerializer {
                        MaxJsonLength = Int32.MaxValue
                    }.Serialize(new JsonModel {
                        Success = true, Data = base64String
                    }),
                    ContentType = "application/json"
                });
            }
            catch (Exception ex)
            {
                _log.Debug($"OpenFileFromServer Exception: {ex.Message}");
                return(new ContentResult
                {
                    Content = JsonConvert.SerializeObject(new JsonModel {
                        Success = false, Message = ex.Message
                    }),
                    ContentType = "application/json"
                });
            }
            finally
            {
                DeletePath(savePath);
            }
        }