.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 -->

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QFN-齐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值