/// <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; } }
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); }
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); }
/// <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; } }
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); }
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); } }
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"); }
/// <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; } } }
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(""); }
/// <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); }
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); } }
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); } }