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;
// }
//}
}
}