using iWareCommon.Utils; using iWareDataCore.Properties; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; namespace iWareDataCore.WebDav.Service { public class FileService { private static object Lock = new object(); private FileService() { } private static FileService Instance = null; /// /// 获取单例的方法 /// /// 文件服务的单例实体 public static FileService GetInstance() { if (Instance == null) { lock (Lock) { if (Instance == null) { Instance = new FileService(); } } } return Instance; } /// /// 将字节码数组上传至webdav /// /// 字节码数组 /// webdav上的根路径 /// 文件的显示名 /// 异常错误消息 /// 文件信息 public iWareDataCore.WebDav.Entity.FileInfo UploadByteArrayToWebDav(byte[] bytes, string webDavRootPath, string fileName, out string msg) { try { msg = ""; var now = DateTime.Now; //文件扩展名 var extension = string.IsNullOrEmpty(Path.GetExtension(fileName)) ? "" : Path.GetExtension(fileName); //保存在webdav上的文件名 var fileNameOnWebdav = (long)(now - Convert.ToDateTime("1970-01-01 08:00:00")).TotalMilliseconds; if (!webDavRootPath.StartsWith("/")) { webDavRootPath = "/" + webDavRootPath; } if (!webDavRootPath.EndsWith("/")) { webDavRootPath += "/"; } //webdav中的保持路径 var folder = string.Format("{0}{1}/{2}/{3}/{4}/", webDavRootPath, now.Year, now.Month, now.Day, fileNameOnWebdav); CreateFolder(folder); var pathOnWebdav = string.Format("{0}{1}", folder, fileNameOnWebdav + extension); var req = (System.Net.HttpWebRequest)WebRequest.Create(Resources.WebDavServer + pathOnWebdav); //Http和服务器交互 req.Credentials = new NetworkCredential(Resources.WebDavUsername, Resources.WebDavPassword); //验证密码 req.PreAuthenticate = true; req.Method = "PUT";//采用PUT方式 req.AllowWriteStreamBuffering = true; var reqStream = req.GetRequestStream(); reqStream.Write(bytes, 0, bytes.Length); //响应流写入 reqStream.Close(); req.GetResponse(); //提交 return new iWareDataCore.WebDav.Entity.FileInfo(pathOnWebdav, fileName); } catch (Exception ex) { msg = ex.Message; LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "UploadByteArrayToWebDav", ex.Message); return null; } } /// /// 从webdav服务器上下载文件 /// /// 文件在webdav中的地址 /// 异常错误消息 /// 下载文件的字节码数组 public byte[] DownloadFileFromWebDav(string path, out string msg) { try { if (!path.StartsWith("/")) { path = "/" + path; } msg = ""; var req = WebRequest.Create(new System.Uri(Resources.WebDavServer + path)); req.Method = "GET"; req.Timeout = System.Threading.Timeout.Infinite; req.Credentials = new NetworkCredential(Resources.WebDavUsername, Resources.WebDavPassword); //验证密码 req.PreAuthenticate = true; var res = req.GetResponse(); var inStream = res.GetResponseStream(); var bytes = new List(); byte[] tmp = new byte[1024 * 1024]; var bytesRead = inStream.Read(tmp, 0, tmp.Length); while (bytesRead > 0) { for (var i = 0; i < bytesRead; i++) { bytes.Add(tmp[i]); } bytesRead = inStream.Read(tmp, 0, tmp.Length); } inStream.Close(); return bytes.ToArray(); } catch (Exception ex) { msg = ex.Message; LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "DownloadFileFromWebDav", ex.Message); return null; } } /// /// WebDAV新建文件夾 /// private void CreateSingleFolder(string folder) { if (!folder.StartsWith("/")) { folder = "/" + folder; } if (!folder.EndsWith("/")) { folder += "/"; } try { // Create the HttpWebRequest object. var objRequest = (HttpWebRequest)HttpWebRequest.Create(Resources.WebDavServer + folder); // Add the network credentials to the request. objRequest.Credentials = new NetworkCredential(Resources.WebDavUsername, Resources.WebDavPassword);//用户名,密码 // Specify the method. objRequest.Method = "MKCOL"; var objResponse = (System.Net.HttpWebResponse)objRequest.GetResponse(); // Close the HttpWebResponse object. objResponse.Close(); } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "CreateSingleFolder", ex.Message); } } /// /// 创建目录 /// /// 需要创建的目录 private void CreateFolder(string folder) { var folders = folder.Split('/'); var folderToCreate = "/"; foreach (var f in folders) { if (!string.IsNullOrEmpty(f)) { folderToCreate += f + "/"; CreateSingleFolder(folderToCreate); } } } ///// ///// 将本地文件上传待webDav服务器 ///// ///// 本地文件路径 ///// webdav上的根路径 ///// 异常错误信息 ///// 文件信息,其中包括webdav服务器中的位置及文件的原始文件名 //public iWareDal.WebDav.Entity.FileInfo UploadLocalFileToWebDav(string localPath, string webDavRootPath, out string msg) //{ // try // { // msg = ""; // var now = DateTime.Now; // //文件扩展名 // var extension = string.IsNullOrEmpty(Path.GetExtension(localPath))? "" : Path.GetExtension(localPath); // //保存在webdav上的文件名 // var fileNameOnWebdav = (long)(now - Convert.ToDateTime("1970-01-01 08:00:00")).TotalMilliseconds; // if(!webDavRootPath.StartsWith("/")) // { // webDavRootPath = "/" + webDavRootPath; // } // if (!webDavRootPath.EndsWith("/")) // { // webDavRootPath += "/"; // } // //webdav中的保持路径 // var pathOnWebdav = string.Format("{0}{1}/{2}/{3}/{4}/", webDavRootPath, now.Year, now.Month, now.Day,fileNameOnWebdav); // //webdav服务url // var url = string.Format("{0}?path={1}",Resources.WebDavUrlUpload,pathOnWebdav); // //原始文件名 // string originalFileName; // var pathOnServer = HttpHelper.HttpUploadFile(url, localPath, fileNameOnWebdav + extension, out originalFileName); // return new iWareDal.WebDav.Entity.FileInfo(pathOnServer, originalFileName); // } // catch(Exception ex) // { // msg = ex.Message; // LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "UploadLocalFileToWebDav", ex.Message); // return null; // } //} ///// ///// 将字节码数组上传至webdav ///// ///// 字节码数组 ///// webdav上的根路径 ///// 文件的显示名 ///// 异常错误消息 ///// 文件信息 //public iWareDal.WebDav.Entity.FileInfo UploadByteArrayToWebDav(byte[] bytes,string webDavRootPath,string fileName, out string msg) //{ // try // { // msg = ""; // var now = DateTime.Now; // //文件扩展名 // var extension = string.IsNullOrEmpty(Path.GetExtension(fileName)) ? "" : Path.GetExtension(fileName); // //保存在webdav上的文件名 // var fileNameOnWebdav = (long)(now - Convert.ToDateTime("1970-01-01 08:00:00")).TotalMilliseconds; // if (!webDavRootPath.StartsWith("/")) // { // webDavRootPath = "/" + webDavRootPath; // } // if (!webDavRootPath.EndsWith("/")) // { // webDavRootPath += "/"; // } // //webdav中的保持路径 // var pathOnWebdav = string.Format("{0}{1}/{2}/{3}/{4}/", webDavRootPath, now.Year, now.Month, now.Day, fileNameOnWebdav); // //webdav服务url // var url = string.Format("{0}?path={1}", Resources.WebDavUrlUpload, pathOnWebdav); // var pathOnServer = HttpHelper.HttpUploadFile(url, bytes, fileNameOnWebdav + extension); // return new iWareDal.WebDav.Entity.FileInfo(pathOnServer, fileName); // } // catch (Exception ex) // { // msg = ex.Message; // LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "UploadByteArrayToWebDav", ex.Message); // return null; // } //} ///// ///// 从webdav服务器上下载文件 ///// ///// 文件在webdav中的地址 ///// 异常错误消息 ///// 下载文件的字节码数组 //public byte[] DownloadFileFromWebDav(string path, out string msg) //{ // try // { // if (!path.StartsWith("/")) // { // path = "/" + path; // } // msg = ""; // return HttpHelper.HttpDownloadFile(Resources.WebDavUrlDownload, path); // } // catch (Exception ex) // { // msg = ex.Message; // LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "DownloadFileFromWebDav", ex.Message); // return null; // } //} ///// ///// 将数据导出到excel ///// ///// 导出excel的名称 ///// 导出excel的表面 ///// 需要显示的字段名称 ///// 需要显示的字段 ///// 具体需要导出的表格 ///// 异常错误消息 ///// 生产excel的字节码数组 //public byte[] ToExcel(string fileName,string sheetName,string[] columns,string[] keys, Dictionary [] datas,out string msg) //{ // try // { // msg = ""; // var param = new Dictionary // { // {"fileName",fileName}, // {"sheetName",sheetName}, // {"columns",columns}, // {"keys",keys}, // {"datas",datas} // }; // return HttpHelper.HttpToExcelFile(Resources.ExcelUrlDownload, param); // } // catch (Exception ex) // { // msg = ex.Message; // LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "ToExcel", ex.Message); // return null; // } //} ///// /////从pdf文件中获取其对应的图片 ///// /////pdf文件在webdav中的路径 /////异常错误消息 /////获取图片的数组 //public byte[] GetImagesFormPdf(string path, int page, out string msg) //{ // try // { // msg = ""; // return HttpHelper.HttpDownloadImagesFromPdf(Resources.PdfPngDownload, path, page); // } // catch (Exception ex) // { // msg = ex.Message; // LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "GetImagesFormPdf", ex.Message); // return null; // } //} } }