.Net .Net Core 下使用FastDFS 文件上传下载
生活随笔
收集整理的這篇文章主要介紹了
.Net .Net Core 下使用FastDFS 文件上传下载
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
引入FastDFS.Client.bll
下載地址:https://pan.baidu.com/s/1-6HcXf8xP3XR883IGflFiw
添加?FastDFSHelper類,代碼如下:
/// <summary>/// 負責人: QFN/// 時 間: 2018-10-15 15:28:37/// 功 能: FastDFS 文件上傳下載/// 描 敘: /// </summary>public class FastDFSHelper{private List<IPEndPoint> trackerIPs = new List<IPEndPoint>();private IPEndPoint endPoint;private StorageNode storageNode;private string groupName = ConfigurationManager.AppSettings["fastdfs_groupname"];/// <summary>/// 鏈接 FASTDFS/// </summary>public FastDFSHelper(){string[] trackers = ConfigurationManager.AppSettings["fastdfs_trackers"].Split(new char[','], StringSplitOptions.RemoveEmptyEntries);string[] storages = ConfigurationManager.AppSettings["fastdfs_storages"].Split(new char[','], StringSplitOptions.RemoveEmptyEntries);int port = int.Parse(ConfigurationManager.AppSettings["fastdfs_port"]);foreach (var onetracker in trackers){trackerIPs.Add(new IPEndPoint(IPAddress.Parse(onetracker), port));}ConnectionManager.Initialize(trackerIPs);storageNode = FastDFSClient.GetStorageNode(groupName);}/// <summary>/// 上傳文件/// </summary>/// <param name="fileStream">文件流</param>/// <param name="prefixName">從文件前綴名稱</param>/// <param name="slaveFileName">返回從文件路徑</param>/// <returns>返回主文件路徑</returns>public string UploadFile(Stream fileStream, string prefixName, string fileExt, out string slaveFileName){byte[] content = new byte[fileStream.Length];using (BinaryReader reader = new BinaryReader(fileStream)){content = reader.ReadBytes((int)fileStream.Length);}//主文件string fileName = FastDFSClient.UploadFile(storageNode, content, fileExt);var info = FastDFSClient.GetFileInfo(storageNode, fileName);//從文件slaveFileName = FastDFSClient.UploadSlaveFile(groupName, content, fileName, prefixName, fileExt);var slaveInfo = FastDFSClient.GetFileInfo(storageNode, slaveFileName);return fileName;}/// <summary>/// 下載文件/// </summary>/// <param name="fileName">文件路徑</param>/// <param name=""></param>/// <returns>文件流</returns>public FileStream DownloadFile(string fileName){FDFSFileInfo fileInfo = FastDFSClient.GetFileInfo(storageNode, fileName);FileStream fileStream = new FileStream(Path.GetTempFileName(), FileMode.Create);if (fileInfo.FileSize >= 1024)//如果文件大小大于1KB 分次寫入{long offset = 0;long len = 1024;while (len > 0){byte[] buffer = new byte[len];buffer = FastDFSClient.DownloadFile(storageNode, fileName, offset, len);fileStream.Write(buffer, 0, int.Parse(len.ToString()));fileStream.Flush();offset = offset + len;len = (fileInfo.FileSize - offset) >= 1024 ? 1024 : (fileInfo.FileSize - offset);}return fileStream;}else//如果文件大小小小于1KB 直接寫入文件{byte[] buffer = new byte[fileInfo.FileSize];buffer = FastDFSClient.DownloadFile(storageNode, fileName);//FileStream fileStream = new FileStream(targetPath, FileMode.OpenOrCreate, FileAccess.Write);fileStream.Write(buffer, 0, buffer.Length);fileStream.Flush();fileStream.Close();return fileStream;}}/// <summary>/// 下載文件/// </summary>/// <param name="fileName">文件路徑</param>/// <param name=""></param>/// <returns>文件流</returns>public byte[] DownloadFileByte(string fileName){FDFSFileInfo fileInfo = FastDFSClient.GetFileInfo(storageNode, fileName);byte[] buffer = new byte[fileInfo.FileSize];buffer = FastDFSClient.DownloadFile(storageNode, fileName);FileStream fs = new FileStream("D://down123.png", FileMode.Create, FileAccess.Write);fs.Write(buffer, 0, buffer.Length);fs.Flush();fs.Close();return buffer;}/// <summary>/// 下載文件 流模式/// </summary>/// <param name="fileName">文件路徑</param>/// <param name=""></param>/// <returns>文件流</returns>public Stream DownloadFileStream(string fileName){FDFSFileInfo fileInfo = FastDFSClient.GetFileInfo(storageNode, fileName);Stream stream = new MemoryStream();if (fileInfo.FileSize >= 1024)//如果文件大小大于1KB 分次寫入{long offset = 0;long len = 1024;while (len > 0){byte[] buffer = new byte[len];buffer = FastDFSClient.DownloadFile(storageNode, fileName, offset, len);stream.Write(buffer, 0, int.Parse(len.ToString()));stream.Flush();offset = offset + len;len = (fileInfo.FileSize - offset) >= 1024 ? 1024 : (fileInfo.FileSize - offset);}}else//如果文件大小小小于1KB 直接寫入文件{byte[] buffer = new byte[fileInfo.FileSize];buffer = FastDFSClient.DownloadFile(storageNode, fileName);//FileStream fileStream = new FileStream(targetPath, FileMode.OpenOrCreate, FileAccess.Write);stream.Write(buffer, 0, buffer.Length);stream.Flush();}stream.Seek(0, SeekOrigin.Begin);return stream;}public void UploadFile(Stream fileStream, string fileName){try{byte[] buffer = new byte[fileStream.Length];FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write);int count = 0;while ((count = fileStream.Read(buffer, 0, buffer.Length)) > 0){fs.Write(buffer, 0, count);}//清空緩沖區fs.Flush();//關閉流fs.Close();}catch (Exception e){}}/// <summary>/// 根據文件名稱獲取文件瀏覽路徑/// </summary>/// <param name="fileName"></param>/// <returns></returns>public string GetFilePath(string fileName){string trackers = ConfigurationManager.AppSettings["fastdfs_storages"];string groupname = ConfigurationManager.AppSettings["fastdfs_groupname"];return trackers + "/" + groupname + "/" + fileName;}}其中?ConfigurationManager.AppSettings 為獲取配置文件中的配置信息,這里有多種下載方式。
配置文件如下:
<!-- FastDFS Start --><add key="fastdfs_trackers" value="192.168.1.56" /><add key="fastdfs_storages" value="192.168.1.56" /><add key="fastdfs_port" value="22122" /><add key="fastdfs_groupname" value="group1" /><add key="fastdfs_maxsize" value="10000000" /><add key="fastdfs_type" value="gif,jpg,jpeg,png,bmp,zip,rar,layout" /><add key="fastdfs_type_file" value="txt,xlsx,zip,rar" /><!-- FastDFS End -->?
總結
以上是生活随笔為你收集整理的.Net .Net Core 下使用FastDFS 文件上传下载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ceb怎么转换成word_PDF怎么转换
- 下一篇: asp.net ajax控件工具集 Au