Ftp上传下载 C#
public class MyFtpClass
{
private readonly string _destIp;
private readonly string _userName;
private readonly string _password;
public MyFtpClass(string desIp, string userName, string passowrd)
{
this._destIp = desIp;
this._userName = userName;
this._password = passowrd;
}
private FtpWebRequest OpenRequest(Uri uri,string ftpMethod)
{
FtpWebRequest request = WebRequest.Create(uri) as FtpWebRequest;
if (request != null)
{
request.Credentials = new NetworkCredential(_userName, _password);
request.UseBinary = true;
request.Method = ftpMethod;
return request;
}
else
{
return null;
} }
private FtpWebResponse OpenResponse(Uri uri, string ftpMethod)
{
FtpWebRequest request= this.OpenRequest(uri, ftpMethod);
if (request != null)
{
FtpWebResponse response = request.GetResponse() as FtpWebResponse;
return response;
}
else
{
return null;
} }
/// <summary>
/// 要上传的本地文件路径
/// </summary>
/// <param name="uploadFilePath">形如:D:\\folder1\\2.jpg </param>
/// <param name="desName">形如:123.jpg 或 subFolder1/123.jpg</param>
/// <returns></returns>
public bool Upload(string uploadFilePath, string desName)
{
Stream requestStream = null;
FtpWebResponse response = null;
try
{
Uri uri = new Uri(string.Format("ftp://{0}/{1}", _destIp, desName));
FtpWebRequest request = OpenRequest(uri, WebRequestMethods.Ftp.UploadFile);
requestStream = request.GetRequestStream(); FileStream fs = File.Open(uploadFilePath, FileMode.Open);
byte[] buff = new byte[];
int buffRead = ;
while (true)
{
int n = fs.Read(buff, buffRead, buff.Length);
if (n == )
{
break;
}
//把文件流写入请求流
requestStream.Write(buff, , n);
} response = (FtpWebResponse)request.GetResponse();
return true;
}
catch (Exception)
{
throw new Exception("上传文件失败!");
}
finally
{
requestStream.Close();
response.Close();
} } /// <summary>
/// 下载文件
/// </summary>
/// <param name="serverFileName">要下载的文件名。形如:123.jpg 或 subFolder1/123.jpg</param>
/// <param name="localPath">下载至本地的路径。形如: D:\\a\\b\\</param>
/// <param name="localName">保存在本地的名称。形如:3.jpg</param>
/// <returns></returns>
public bool Download(string serverFileName, string localPath, string localName)
{
Stream responseStream=null;
FileStream fileStream=null;
try
{
Uri uri = new Uri(string.Format("ftp://{0}/{1}", _destIp, serverFileName));
FtpWebResponse downloadResponse = OpenResponse(uri, WebRequestMethods.Ftp.DownloadFile);
responseStream = downloadResponse.GetResponseStream();
fileStream = File.Create(localPath + localName);
byte[] buffer = new byte[];
while (true)
{
var bytesRead = responseStream.Read(buffer, , buffer.Length);
if (bytesRead == )
break;
//把响应流写入文件
fileStream.Write(buffer, , bytesRead);
} return true;
}
catch
{
throw new Exception("获取下载文件失败!");
}
finally
{
fileStream.Close();
responseStream.Close();
}
}
}
需要注意的流文件的读出和写入问题:
例如,
int n = fs.Read(buff, buffRead, buff.Length);
bufferRead和buff.Length指的是数组buff的索引以及长度。
流文件fs会自动维护一个指针Position,每当read n个字节时,会自动向后移动n个字节。
fileStream.Write(buffer, 0, bytesRead);是同样的道理。
Ftp上传下载 C#的更多相关文章
- JAVA 实现FTP上传下载(sun.net.ftp.FtpClient)
package com.why.ftp; import java.io.DataInputStream; import java.io.File; import java.io.FileInputSt ...
- windows系统下ftp上传下载和一些常用命令
先假设一个ftp地址 用户名 密码 FTP Server: home4u.at.china.com User: yepanghuang Password: abc123 打开windows的开始菜单, ...
- windows下ftp上传下载和一些常用命令
先假设一个ftp地址 用户名 密码 FTP Server: home4u.at.china.com User: yepanghuang Password: abc123 打开windows的开始菜单, ...
- FTP上传下载工具(FlashFXP) v5.5.0 中文版
软件名称: FTP上传下载工具(FlashFXP) 软件语言: 简体中文 授权方式: 免费试用 运行环境: Win 32位/64位 软件大小: 7.4MB 图片预览: 软件简介: FlashFXP 是 ...
- 高可用的Spring FTP上传下载工具类(已解决上传过程常见问题)
前言 最近在项目中需要和ftp服务器进行交互,在网上找了一下关于ftp上传下载的工具类,大致有两种. 第一种是单例模式的类. 第二种是另外定义一个Service,直接通过Service来实现ftp的上 ...
- C# -- FTP上传下载
C# -- FTP上传下载 1. C#实现FTP下载 private static void TestFtpDownloadFile(string strFtpPath, string strFile ...
- Java.ftp上传下载
1:jar的maven的引用: 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht ...
- python之实现ftp上传下载代码(含错误处理)
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之实现ftp上传下载代码(含错误处理) #http://www.cnblogs.com/kait ...
- python之模块ftplib(实现ftp上传下载代码)
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之模块ftplib(实现ftp上传下载代码) #需求:实现ftp上传下载代码(不含错误处理) f ...
- java客户端调用ftp上传下载文件
1:java客户端上传,下载文件. package com.li.utils; import java.io.File; import java.io.FileInputStream; import ...
随机推荐
- java06
阅读并运行示例PassArray.java,观察并分析程序输出的结果 小结:引用传递.如果方法中有代码则更改了数组元素的值,因为引用时传递的是地址. 阅读程序WhatDoesThisDo.java, ...
- javascript中的内置对象总结
内置对象 标准内置对象 Object Object.create Object.prototype.toString Object.prototype.hasOwnProperty Boolean S ...
- iOS开发点滴:iPhone屏幕适配
最近开始做iOS开发,遇到一些小问题和解决方法,记录下. 今天是iPhone屏幕适配 iPhone5出来之后屏幕就有iPhone就有了2种尺寸:3.5寸和4寸,xcode 5 的IB设计器里面界面 ...
- 基于Deep Learning 的视频识别方法概览
深度学习在最近十来年特别火,几乎是带动AI浪潮的最大贡献者.互联网视频在最近几年也特别火,短视频.视频直播等各种新型UGC模式牢牢抓住了用户的消费心里,成为互联网吸金的又一利器.当这两个火碰在一起,会 ...
- 剑指Offer面试题:9.二进制中1的个数
一.题目:二进制中1的个数 题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数.例如把9表示成二进制是1001,有2位是1.因此如果输入9,该函数输出2. 二.可能引起死循环的解法 一个 ...
- Atitit 查询优化器的流程attilax总结
Atitit 查询优化器的流程attilax总结 1.1. 来理解该过程:1 1.2. 关于这些优化器的最重要原则的就是:尽可能的减少扫描范围,2 1.3. .筛选条件分析2 1.4. 二.索引优化2 ...
- 基于ReactCSSTransitionGroup实现react-router过渡动画
此前,我使用了react-router库来完成单页应用的路由,从而实现组件之间的切换能力.然而,默认页面的切换是非常生硬的,为了让页面切换更加缓和与舒适,通常的方案就是过渡动画. 这里我调研了2种 ...
- 使用 DBCC IND 查看BTree 和 Heap结构
Table 有两种结构:BTree 和 Heap,一个table的结构必定是其中之一.如果在表上创建clustered index,那么表的结构是BTree:如果表上没有创建Clustered ind ...
- 无法启动WP Emulator
记得以前Vware不能运行设置的东西了吗?http://www.cnblogs.com/dunitian/p/4480750.html 如果不清楚可以参考上面的链接 重启的时候选择第二项 重新打开就o ...
- C#设计模式系列:状态模式(State)
1.状态模式简介 1.1>.定义 状态模式的核心思想是允许一个对象在它的内部状态改变时改变它的行为,即不同的状态对应不同的行为. 状态模式的针对性很强,当有状态变化的时候可以选择状态模式. 1. ...