前言:最近要实现从FTP服务器下载和上传文件,在网上搜了一下据说 FluentFTP 是个客户端FTP功能的实现,使用还比较顺畅,所以对此展开研究,无奈网上给出的案例并没有想象中的那么简洁,所以想着自己搞一个代码少易读性高的demo来给需要的小伙伴。话不多说直接上案例,文章结尾会有下载地址。

一、首先我们需要通过 NuGet 导入 FluentFTP 包。

二、编写上传和下载部分代码。

using FluentFTP;
using System;
using System.IO;
using System.Net; namespace FluentFTPDemo
{
class Program
{
static void Main(string[] args)
{
UploadFile("ftp://192.168.1.200/", "test", "test", "d:\\doctument\\test.pdf");
DownloadFile("ftp://192.168.1.200/", "test", "test", "d:\\doctument\\0bc600ee-b36a-4344-b82d-5e23b9de771c.pdf", "/Files/0bc600ee-b36a-4344-b82d-5e23b9de771c");
Console.ReadLine();
} /// <summary>
/// FTP服务器文件下载到本地
/// </summary>
/// <param name="ftphost">ftp地址:ftp://192.168.1.200/</param>
/// <param name="user">ftp用户名</param>
/// <param name="password">ftp密码</param>
/// <param name="saveLocalPath">下载到本地的地址:d:\\doctument\\0F5GAHRT4A484TRA5D15FEA.pdf</param>
/// <param name="downPath">将要下载的文件在FTP上的路径:/DownFile/0F5GAHRT4A484TRA5D15FEA</param>
static void DownloadFile(string ftphost, string user, string password, string saveLocalPath, string downPath)
{
using (FtpClient conn = new FtpClient())
{
conn.Host = ftphost;
conn.Credentials = new NetworkCredential(user, password); byte[] outBuffs;
bool flag = conn.Download(out outBuffs, downPath); string s = saveLocalPath.Substring(, saveLocalPath.LastIndexOf('\\'));
Directory.CreateDirectory(s);//如果文件夹不存在就创建它 FileStream fs = new FileStream(saveLocalPath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
fs.Write(outBuffs, , outBuffs.Length);
//清空缓冲区、关闭流
fs.Flush();
fs.Close();
}
} /// <summary>
/// 将文件上传到FTP服务器
/// </summary>
/// <param name="ftphost">ftp地址</param>
/// <param name="user">ftp用户名</param>
/// <param name="password">ftp密码</param>
/// <param name="localPath">本地文件所在的路径:"D:\doctument\test.pdf"</param>
static void UploadFile(string ftphost, string user, string password, string localPath)
{
try
{
using (FtpClient conn = new FtpClient())
{
conn.Host = ftphost;
conn.Credentials = new NetworkCredential(user, password);
using (FileStream fs = new FileStream(localPath, FileMode.Open))
{
string path = localPath.Substring(localPath.LastIndexOf('\\') + ); //取文件名
bool flag = conn.Upload(fs, path);
}
}
}
catch (Exception ex)
{ }
}
}
}

  链接: https://pan.baidu.com/s/17ACQrZI_90PjMBJ2rRhbwg

  提取码: i98j

C# FluentFTP类上传下载文件的更多相关文章

  1. SFTP远程连接服务器上传下载文件-qt4.8.0-vs2010编译器-项目实例

    本项目仅测试远程连接服务器,支持上传,下载文件,更多功能开发请看API自行开发. 环境:win7系统,Qt4.8.0版本,vs2010编译器 qt4.8.0-vs2010编译器项目实例下载地址:CSD ...

  2. C#实现http协议支持上传下载文件的GET、POST请求

    C#实现http协议支持上传下载文件的GET.POST请求using System; using System.Collections.Generic; using System.Text; usin ...

  3. 向linux服务器上传下载文件方式收集

    向linux服务器上传下载文件方式收集 1. scp [优点]简单方便,安全可靠:支持限速参数[缺点]不支持排除目录[用法] scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用 ...

  4. 【WCF】利用WCF实现上传下载文件服务

    引言     前段时间,用WCF做了一个小项目,其中涉及到文件的上传下载.出于复习巩固的目的,今天简单梳理了一下,整理出来,下面展示如何一步步实现一个上传下载的WCF服务. 服务端 1.首先新建一个名 ...

  5. java web service 上传下载文件

    1.新建动态web工程youmeFileServer,新建包com,里面新建类FileProgress package com; import java.io.FileInputStream; imp ...

  6. rz和sz上传下载文件工具lrzsz

    ######################### rz和sz上传下载文件工具lrzsz ####################################################### ...

  7. linux上很方便的上传下载文件工具rz和sz

    linux上很方便的上传下载文件工具rz和sz(本文适合linux入门的朋友) ##########################################################&l ...

  8. shell通过ftp实现上传/下载文件

    直接代码,shell文件名为testFtptool.sh: #!/bin/bash ########################################################## ...

  9. linux下常用FTP命令 上传下载文件【转】

    1. 连接ftp服务器 格式:ftp [hostname| ip-address]a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码,分别输入用户名和相应密码 ...

随机推荐

  1. Spring @Scheduled定时任务的fixedRate,fixedDelay,cron的作用和不同

    一.   三种定时类型. 1.cron  --@Scheduled(cron="0/5 * * * *?") 当时间达到设置的时间会触发事件.上面那个例子会每5秒执行一次. 201 ...

  2. 解决:C++ 中 main函数 wmain函数 _tmain函数 WinMain函数 wWInMain函数 _tWinMain函数的区别

    main函数与WinMain函数区别: 前者为控制台程序入口主函数,后者为Windows API窗体程序入口函数,在windef.h文件中定义. main函数与wmain函数 | WinMain函数与 ...

  3. Xcode 创建.a和framework静态库(转)

    最近因为项目中的聊天SDK,需要封装成静态库,所以实践了一下创建静态库的步骤,做下记录. 库介绍 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种.iOS中的静 ...

  4. 第八次 Java 作业 重写正方形周长方法

    # 题目 编写一个应用程序,创建一个矩形类,类中具有长.宽两个成员变量和求周长的方法. 再创建一个矩形类的子类——正方形类,类中定义求面积方法.重写求周长的方法. 在主类中,输入一个正方形边长,创建正 ...

  5. artillery 学习一 简单使用

    artillery 是一个不错的负载测试套件,功能很强大,支持多协议 安装 npm install -g artillery --unsafe-perm 运行一个简单的快速测试 artillery q ...

  6. 判断一个数是否能整开方,perfect square

    int m,n;m=sqrt(n);m*m==n?yes:no; https://www.codewars.com/kata/56269eb78ad2e4ced1000013/solutions/ja ...

  7. oracle中union和union all区别与性能分析

    [ 概要 ] 经常写sql的同学可能会用到union和union all这两个关键词, 可能你知道使用它们可以将两个查询的结果集进行合并, 那么二者有什么区别呢? 下面我们就简单的分析下. [ 比较 ...

  8. mac mysql 使用注意事项

    mac mysql 使用注意事项 .安装 直接通过下载官网上的dmg安装包进行安装,mysql--osx10.-x86_64(我的安装文件) ,安装完成后在系统偏好设置里面有mysql选项,我们可以通 ...

  9. mercurial branch name use integer as a name

    问题:mercurial branch name use integer as a name 解决: 到安装目录下找到mercurial/scmutil.py文件(我的:/usr/local/Cell ...

  10. kalman滤波原理

    2017拜拜啦,怎么过元旦呢?当然是果断呆实验室过... 应该是大二的时候首次听说kalman,一直到今天早上,我一看到其5条“黄金公式”,就会找各种理由放弃,看不懂呀...但是研究lidar定位需要 ...