FTP文件管理
因为网站有下载文件需要和网站分离,使用到了FTP管理文件,这里做一个简单的整理。
1.安装FTP
和安装iis一样。全部勾选。
设置站点名称和路径。
设置ip。
身份授权选择所有用户,可以读写。
完成之后 IIS就会出现:
2.添加FTP用户
计算机-->管理-->本地用户和组。 添加用户,描述为FTP。
这里要设置用户的密码方式,去掉“用户下次登录时必须更改密码”的选项。
不然会登录不成功。报530错误。
3.测试登录
ftp ip 就可以访问。显示230 user logged in 表示登录成功。
4.上传下载
FtpHelper:
- public static class FtpHelper
- {
- //基本设置
- private const string Path = @"ftp://192.168.253.4:21/"; //目标路径
- private const string Ftpip = "192.168.253.4"; // GetAppConfig("obj"); //ftp IP地址
- private const string Username = "stone"; //GetAppConfig("username"); //ftp用户名
- private const string Password = ""; //GetAppConfig("password"); //ftp密码
- // 2M 可能不够
- private const int bufferSize = ;
- /// <summary>
- /// 获取自定义配置的值
- /// </summary>
- /// <param name="strKey">键值</param>
- /// <returns>键值对应的值</returns>
- public static string GetAppConfig(string strKey)
- {
- foreach (string key in ConfigurationManager.AppSettings)
- {
- if (key == strKey)
- {
- return ConfigurationManager.AppSettings[strKey];
- }
- }
- return null;
- }
- //获取ftp上面的文件和文件夹
- public static string[] GetFileList(string dir)
- {
- var result = new StringBuilder();
- try
- {
- var ftpRequest = FtpRequest(Path, WebRequestMethods.Ftp.ListDirectory);
- WebResponse response = ftpRequest.GetResponse();
- var reader = new StreamReader(response.GetResponseStream());
- string line = reader.ReadLine();
- while (line != null)
- {
- result.Append(line);
- result.Append("\n");
- Console.WriteLine(line);
- line = reader.ReadLine();
- }
- // to remove the trailing '\n'
- result.Remove(result.ToString().LastIndexOf('\n'), );
- reader.Close();
- response.Close();
- return result.ToString().Split('\n');
- }
- catch (Exception ex)
- {
- Console.WriteLine("获取ftp上面的文件和文件夹:" + ex.Message);
- return new[] {""};
- }
- }
- /// <summary>
- /// 获取文件大小
- /// </summary>
- /// <param name="file">ip服务器下的相对路径</param>
- /// <returns>文件大小</returns>
- public static int GetFileSize(string file)
- {
- var result = new StringBuilder();
- FtpWebRequest request;
- try
- {
- request = (FtpWebRequest) WebRequest.Create(new Uri(Path + file));
- request.UseBinary = true;
- request.Credentials = new NetworkCredential(Username, Password); //设置用户名和密码
- request.Method = WebRequestMethods.Ftp.GetFileSize;
- var dataLength = (int) request.GetResponse().ContentLength;
- return dataLength;
- }
- catch (Exception ex)
- {
- Console.WriteLine("获取文件大小出错:" + ex.Message);
- return -;
- }
- }
- /// <summary>
- /// 文件上传
- /// </summary>
- /// <param name="localFile">原路径(绝对路径)包括文件名</param>
- /// <param name="remoteFile">目标文件夹:服务器下的相对路径 不填为根目录</param>
- public static bool UpLoad(string localFile, string remoteFile = "")
- {
- try
- {
- string url = Path;
- if (remoteFile != "")
- url += remoteFile + "/";
- try
- {
- //待上传的文件 (全路径)
- try
- {
- var fileInfo = new FileInfo(localFile);
- using (FileStream fs = fileInfo.OpenRead())
- {
- long length = fs.Length;
- FtpWebRequest reqFtp = FtpRequest(url + fileInfo.Name,WebRequestMethods.Ftp.UploadFile);
- using (Stream stream = reqFtp.GetRequestStream())
- {
- //设置缓冲大小
- int BufferLength = ;
- var b = new byte[BufferLength];
- int i;
- while ((i = fs.Read(b, , BufferLength)) > )
- {
- stream.Write(b, , i);
- }
- Console.WriteLine("上传文件成功");
- return true;
- }
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine("上传文件失败错误为" + ex.Message);
- }
- finally
- {
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine("上传文件失败错误为" + ex.Message);
- }
- finally
- {
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine("上传文件失败错误为" + ex.Message);
- }
- return false;
- }
- public static bool UpLoad(Stream localFileStream, string remoteFile)
- {
- bool result = true;
- try
- {
- var ftpRequest = FtpRequest(Path + remoteFile, WebRequestMethods.Ftp.UploadFile);
- var ftpStream = ftpRequest.GetRequestStream();
- var byteBuffer = new byte[bufferSize];
- int bytesSent = localFileStream.Read(byteBuffer, , bufferSize);
- try
- {
- while (bytesSent != )
- {
- ftpStream.Write(byteBuffer, , bytesSent);
- bytesSent = localFileStream.Read(byteBuffer, , bufferSize);
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.ToString());
- result = false;
- }
- localFileStream.Close();
- ftpStream.Close();
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.ToString());
- result = false;
- }
- return result;
- }
- public static FtpWebRequest FtpRequest(string requstUrl,string method,bool closedResponse=false)
- {
- var reqFtp = (FtpWebRequest) WebRequest.Create(new Uri(requstUrl));
- //设置连接到FTP的帐号密码
- reqFtp.Credentials = new NetworkCredential(Username, Password);
- //设置请求完成后是否保持连接
- reqFtp.KeepAlive = false;
- //指定执行命令
- reqFtp.Method = method;
- //指定数据传输类型
- reqFtp.UseBinary = true;
- if (closedResponse)
- {
- var resp=reqFtp.GetResponse();
- resp.Close();
- }
- return reqFtp;
- }
- /// <summary>
- /// 下载
- /// </summary>
- /// <param name="localFile">目的位置</param>
- /// <param name="remoteFile">服务器相对位置</param>
- /// <returns></returns>
- public static bool Download(string localFile,string remoteFile)
- {
- bool check = true;
- try
- {
- var outputStream = new FileStream(localFile, FileMode.Create);
- var ftpRequest = FtpRequest(Path + remoteFile, WebRequestMethods.Ftp.DownloadFile);
- var response = (FtpWebResponse)ftpRequest.GetResponse();
- Stream ftpStream = response.GetResponseStream();
- long cl = response.ContentLength;
- int bufferSize = ;
- int readCount;
- var buffer = new byte[bufferSize];
- readCount = ftpStream.Read(buffer, , bufferSize);
- while (readCount > )
- {
- outputStream.Write(buffer, , readCount);
- readCount = ftpStream.Read(buffer, , bufferSize);
- }
- ftpStream.Close();
- outputStream.Close();
- response.Close();
- }
- catch (Exception err)
- {
- check = false;
- }
- return check;
- }
- public static Stream Download(string remoteFile)
- {
- var ftpRequest = FtpRequest(Path + remoteFile, WebRequestMethods.Ftp.DownloadFile);
- var response = (FtpWebResponse)ftpRequest.GetResponse();
- Stream ftpStream = response.GetResponseStream();
- return ftpStream;
- }
- /// <summary>
- /// 删除文件
- /// </summary>
- /// <param name="fileName">服务器下的相对路径 包括文件名</param>
- public static void DeleteFileName(string fileName)
- {
- try
- {
- FtpRequest(Path + fileName, WebRequestMethods.Ftp.DeleteFile,true);
- }
- catch (Exception ex)
- {
- Console.WriteLine("删除文件出错:" + ex.Message);
- }
- }
- /// <summary>
- /// 新建目录 上一级必须先存在
- /// </summary>
- /// <param name="dirName">服务器下的相对路径</param>
- public static void MakeDir(string dirName)
- {
- try
- {
- FtpRequest(Path + dirName, WebRequestMethods.Ftp.MakeDirectory, true);
- }
- catch (Exception ex)
- {
- Console.WriteLine("创建目录出错:" + ex.Message);
- }
- }
- /// <summary>
- /// 删除目录 上一级必须先存在
- /// </summary>
- /// <param name="dirName">服务器下的相对路径</param>
- public static void DelDir(string dirName)
- {
- try
- {
- FtpRequest(Path + dirName, WebRequestMethods.Ftp.RemoveDirectory,true);
- }
- catch (Exception ex)
- {
- Console.WriteLine("删除目录出错:" + ex.Message);
- }
- }
- /// <summary>
- /// 从ftp服务器上获得文件夹列表
- /// </summary>
- /// <param name="requedstPath">服务器下的相对路径</param>
- /// <returns></returns>
- public static List<string> GetDirctory(string requedstPath)
- {
- var strs = new List<string>();
- try
- {
- var reqFtp = FtpRequest(Path + requedstPath, WebRequestMethods.Ftp.ListDirectoryDetails);
- WebResponse response = reqFtp.GetResponse();
- var reader = new StreamReader(response.GetResponseStream()); //中文文件名
- string line = reader.ReadLine();
- while (line != null)
- {
- if (line.Contains("<DIR>"))
- {
- string msg = line.Substring(line.LastIndexOf("<DIR>") + ).Trim();
- strs.Add(msg);
- }
- line = reader.ReadLine();
- }
- reader.Close();
- response.Close();
- return strs;
- }
- catch (Exception ex)
- {
- Console.WriteLine("获取目录出错:" + ex.Message);
- }
- return strs;
- }
- /// <summary>
- /// 从ftp服务器上获得文件列表
- /// </summary>
- /// <param name="requedstPath">服务器下的相对路径</param>
- /// <returns></returns>
- public static List<string> GetFile(string requedstPath)
- {
- var strs = new List<string>();
- try
- {
- var reqFtp = FtpRequest(Path + requedstPath, WebRequestMethods.Ftp.ListDirectoryDetails);
- WebResponse response = reqFtp.GetResponse();
- var reader = new StreamReader(response.GetResponseStream()); //中文文件名
- string line = reader.ReadLine();
- while (line != null)
- {
- if (!line.Contains("<DIR>"))
- {
- string msg = line.Substring().Trim();
- strs.Add(msg);
- }
- line = reader.ReadLine();
- }
- reader.Close();
- response.Close();
- return strs;
- }
- catch (Exception ex)
- {
- Console.WriteLine("获取文件出错:" + ex.Message);
- }
- return strs;
- }
- }
主要是通过创建FtpRequest来处理Ftp相关请求。
- public static FtpWebRequest FtpRequest(string requstUrl,string method,bool closedResponse=false)
- {
- var reqFtp = (FtpWebRequest) WebRequest.Create(new Uri(requstUrl));
- //设置连接到FTP的帐号密码
- reqFtp.Credentials = new NetworkCredential(Username, Password);
- //设置请求完成后是否保持连接
- reqFtp.KeepAlive = false;
- //指定执行命令
- reqFtp.Method = method;
- //指定数据传输类型
- reqFtp.UseBinary = true;
- if (closedResponse)
- {
- var resp=reqFtp.GetResponse();
- resp.Close();
- }
- return reqFtp;
- }
因为在MVC网站中使用的文件流的方式。
下载:
- public static Stream Download(string remoteFile)
- {
- var ftpRequest = FtpRequest(Path + remoteFile, WebRequestMethods.Ftp.DownloadFile);
- var response = (FtpWebResponse)ftpRequest.GetResponse();
- Stream ftpStream = response.GetResponseStream();
- return ftpStream;
- }
调用:
- public ActionResult DownloadFileFromFtp()
- {
- var filepath = "DIAView//simple.png";
- var stream = FtpHelper.Download(filepath);
- return File(stream, FileHelper.GetContentType(".png"),"test.png");
- }
上传:
- public static bool UpLoad(Stream localFileStream, string remoteFile)
- {
- bool result = true;
- try
- {
- var ftpRequest = FtpRequest(Path + remoteFile, WebRequestMethods.Ftp.UploadFile);
- var ftpStream = ftpRequest.GetRequestStream();
- var byteBuffer = new byte[bufferSize];
- int bytesSent = localFileStream.Read(byteBuffer, , bufferSize);
- try
- {
- while (bytesSent != )
- {
- ftpStream.Write(byteBuffer, , bytesSent);
- bytesSent = localFileStream.Read(byteBuffer, , bufferSize);
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.ToString());
- result = false;
- }
- localFileStream.Close();
- ftpStream.Close();
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.ToString());
- result = false;
- }
- return result;
- }
调用:
- [HttpPost]
- public JsonResult UploadFile(HttpPostedFileBase fileData)
- {
- if (fileData != null)
- {
- string fileName = Path.GetFileName(fileData.FileName);// 原始文件名称
- string saveName = Encrypt.GenerateOrderNumber() +"_"+fileName;
- FtpHelper.UpLoad(fileData.InputStream, "DIAView" + "/" + saveName);
- return Json(new { Success = true, FileName = fileName, SaveName = saveName}, JsonRequestBehavior.AllowGet);
- }
- return Json(new { Success = false, Message = "请选择要上传的文件!" }, JsonRequestBehavior.AllowGet);
- }
Ftp还可以设置不同用户有不同的目录,是以为记。
FTP文件管理的更多相关文章
- C# winfrom 模拟ftp文件管理
从网上找到的非常好用的模拟ftp管理代码,整理了一下,希望对需要的人有帮助 using System; using System.Collections.Generic; using System.T ...
- FTP服务器上删除文件夹失败
很多人都知道:要删除FTP服务器上的文件夹时,必须确保文件夹下面没有其他文件,否则会删除失败! 可是,有些服务器考虑到安全等因素,通常会隐藏以点开始的文件名,例如“.test.txt”.于是,有的坏人 ...
- Java语言实现简单FTP软件------>上传下载管理模块的实现(十一)
1.上传本地文件或文件夹到远程FTP服务器端的功能. 当用户在本地文件列表中选择想要上传的文件后,点击上传按钮,将本机上指定的文件上传到FTP服务器当前展现的目录,下图为上传子模块流程图 选择好要上传 ...
- FTP文传协议的应用
我开发的项目中一直用到都是AFNetworking上传图片的方法,最近老大说要用FTP上传,网上的资料很少,毕竟这种上传方式现在用的不多了,于是花了一天时间学习了FTP文件传输协议.下面是我的个人理解 ...
- Web 项目可能会用到的20款优秀的开源工具
开源的应用程序和它们的源代码可以免费获得,因为版权是属于任何进行过修改或者提交代码的人.大多数提供开源软件的公司都可以建立行业标准,因此可以获得有利的竞争优势. 很多的开源应用程序和工具都有很强的替代 ...
- 令人惊叹的Visual Studio Code插件
vscode是一款开源且优秀的编辑器,接下来让我吐血推荐一下我工作使用过的令人惊叹的Visual Studio Code插件. 代码编辑插件 vscode-color-highlight ------ ...
- PHP基础教程 10款人气暴涨的PHP开源工具
若想创建动态而又新颖的Web应用程序,PHP便是理想的选择.不用说,在Web开发世界里,PHP是最流行的语言之一.一些非常好用的PHP开源工具着实拯救了不少开发任务繁重的PHP开发 人员,减轻他们的开 ...
- 10款人气暴涨的PHP开源工具
若想创建动态而又新颖的Web应用程序,PHP便是理想的选择.不用说,在Web开发世界里,PHP是最流行的语言之一.一些非常好用的PHP开源工具着实拯救了不少开发任务繁重的PHP开发人员,减轻他们的开发 ...
- Web文件管理:elFinder.Net(支持FTP)
elFinder 是一个基于 Web 的文件管理器,灵感来自 Mac OS X 的 Finder 程序. elFinder.Net是.Net版本的一个Demo,使用ASP.NET MVC 4集成,可以 ...
随机推荐
- Linux服务器上安装织梦CMS
安装篇 第一步:配置防火墙(默认情况下,端口80和3306是拒绝访问的,在防火墙上进行配置): vi /etc/sysconfig/iptables(在"COMMIT"的上一行加上 ...
- DOS:将某文件夹下面的所有某一类型文件名输出
C:\Users\lv>cd /d C:\Siemens\Teamcenter11\lib C:\Siemens\Teamcenter11\lib>dir /B *.lib >lis ...
- Linux添加/删除用户和用户组
声明:现大部分文章为寻找问题时在网上相互转载,在此博客中做个记录,方便自己也方便有类似问题的朋友,故原出处已不好查到,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明.谢谢. 本文总结了Li ...
- 默认构造方法并非总是public的
以前印象中一直有一个概念,说"如果没有提供构造方法,java将自动添加一个空的public的构造方法".现在看来,有2个问题,一,默认构造方法未必是public的,二,默认构造方法 ...
- 陨石坑之webapi使用filter
首先为什么说这是一个坑,是因为我们在webapi中使用filter的时候也许会先百度一下,好吧,挖坑的来了,我看了好几篇文章写的是使用System.Web.Mvc.Filters.ActionFilt ...
- SAP项目管理模块培训教材
SAP项目管理模块培训教材(PLM210.PLM220.PLM230)分享: http://sap.npbok.com/
- css3动画之图片旋转
直接上代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- SQL Server 分区表
分区表可以提高查询效率 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件放在不同的磁盘下由多个cpu进行处理.这样文件的大小随 ...
- 『TCP/IP详解——卷一:协议』读书笔记——14
2013-08-25 11:32:06 第5章 RARP:逆地址解析协议 5.1 引言 具有本地磁盘的系统引导时,一般是从磁盘上的配置文件中读取IP地址.但是无盘机,如X终端或无盘工作站,则需要采用其 ...
- iOS开发之AppIcon及LaunchScreen设置
一.AppIcon设置 具体设置步骤如下图: 二.LaunchScreen设置与停留时间设置 具体设置步骤如下图: 通过程序可以增加背景的停留时间: