|
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;
|
|
/// <summary>
|
/// 获取单例的方法
|
/// </summary>
|
/// <returns>文件服务的单例实体</returns>
|
|
public static FileService GetInstance()
|
{
|
|
if (Instance == null)
|
{
|
lock (Lock)
|
{
|
if (Instance == null)
|
{
|
Instance = new FileService();
|
}
|
}
|
}
|
return Instance;
|
}
|
|
/// <summary>
|
/// 将字节码数组上传至webdav
|
/// </summary>
|
/// <param name="bytes">字节码数组</param>
|
/// <param name="webDavRootPath">webdav上的根路径</param>
|
/// <param name="fileName">文件的显示名</param>
|
/// <param name="msg">异常错误消息</param>
|
/// <returns>文件信息</returns>
|
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;
|
}
|
}
|
|
/// <summary>
|
/// 从webdav服务器上下载文件
|
/// </summary>
|
/// <param name="path">文件在webdav中的地址</param>
|
/// <param name="msg">异常错误消息</param>
|
/// <returns>下载文件的字节码数组</returns>
|
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>();
|
|
|
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;
|
}
|
}
|
|
/// <summary>
|
/// WebDAV新建文件夾
|
/// </summary>
|
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);
|
|
}
|
|
}
|
|
/// <summary>
|
/// 创建目录
|
/// </summary>
|
/// <param name="folder">需要创建的目录</param>
|
private void CreateFolder(string folder)
|
{
|
var folders = folder.Split('/');
|
|
var folderToCreate = "/";
|
|
foreach (var f in folders)
|
{
|
if (!string.IsNullOrEmpty(f))
|
{
|
folderToCreate += f + "/";
|
CreateSingleFolder(folderToCreate);
|
}
|
}
|
}
|
|
|
///// <summary>
|
///// 将本地文件上传待webDav服务器
|
///// </summary>
|
///// <param name="localPath">本地文件路径</param>
|
///// <param name="webDavRootPath">webdav上的根路径</param>
|
///// <param name="msg">异常错误信息</param>
|
///// <returns>文件信息,其中包括webdav服务器中的位置及文件的原始文件名</returns>
|
//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;
|
// }
|
//}
|
|
|
///// <summary>
|
///// 将字节码数组上传至webdav
|
///// </summary>
|
///// <param name="bytes">字节码数组</param>
|
///// <param name="webDavRootPath">webdav上的根路径</param>
|
///// <param name="fileName">文件的显示名</param>
|
///// <param name="msg">异常错误消息</param>
|
///// <returns>文件信息</returns>
|
//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;
|
// }
|
//}
|
|
|
///// <summary>
|
///// 从webdav服务器上下载文件
|
///// </summary>
|
///// <param name="path">文件在webdav中的地址</param>
|
///// <param name="msg">异常错误消息</param>
|
///// <returns>下载文件的字节码数组</returns>
|
//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;
|
// }
|
//}
|
|
|
///// <summary>
|
///// 将数据导出到excel
|
///// </summary>
|
///// <param name="fileName">导出excel的名称</param>
|
///// <param name="sheetName">导出excel的表面</param>
|
///// <param name="columns">需要显示的字段名称</param>
|
///// <param name="keys">需要显示的字段</param>
|
///// <param name="datas">具体需要导出的表格</param>
|
///// <param name="msg">异常错误消息</param>
|
///// <returns>生产excel的字节码数组</returns>
|
//public byte[] ToExcel(string fileName,string sheetName,string[] columns,string[] keys, Dictionary<string,object> [] datas,out string msg)
|
//{
|
// try
|
// {
|
// msg = "";
|
// var param = new Dictionary<string, object>
|
// {
|
// {"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;
|
// }
|
//}
|
|
/////<summary>
|
/////从pdf文件中获取其对应的图片
|
/////</summary>
|
/////<param name="path">pdf文件在webdav中的路径</param>
|
/////<param name="msg">异常错误消息</param>
|
/////<returns>获取图片的数组</returns>
|
//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;
|
// }
|
//}
|
}
|
}
|