设为首页 收藏本站
查看: 1249|回复: 0

Asp.net 2.0中Ftp支持断点续传 源码

[复制链接]
YunVN网友  发表于 2015-5-26 12:24:53 |阅读模式
  

DSC0000.gif DSC0001.gif /**//*****************************************************************
DSC0002.gif // Copyright (C) 2006-2007 Newegg Corporation
// All rights reserved.
//
// Author:       Charles Ge (Charles.Y.Ge@Newegg.com)
// Create Date:  04/12/2007 15:33:42
// Usage: DFIS Ftp Client Service,add ftp site,upload files,download files
//
// RevisionHistory
// Date         Author               Description
//
DSC0003.gif *****************************************************************/
DSC0004.gif using System;
using System.IO;
using System.Net;
using System.Net.Security;
using System.Collections;
using System.Collections.Generic;
using System.Security.Cryptography.X509Certificates;
using System.Web;
using System.Web.Configuration;  


1  public sealed class FtpClientService
2     {
3         #region Internal Members
4
5         private NetworkCredential certificate;
6
7         #endregion
8
9         ///
10         /// 构造函数,提供初始化数据的功能,打开Ftp站点
11         ///
12         public FtpClientService()
13         {
14             certificate = new NetworkCredential(WebConfigurationManager.AppSettings["UserName"], WebConfigurationManager.AppSettings["PassWord"]);
15         }
16
17  ///
18         /// 创建FTP请求
19         ///
20         /// ftp://myserver/upload.txt
21         /// Upload/Download
22         ///
23         private FtpWebRequest CreateFtpWebRequest(Uri uri, string method)
24         {
25             FtpWebRequest ftpClientRequest = (FtpWebRequest)WebRequest.Create(uri);
26
27             ftpClientRequest.Proxy = null;
28             ftpClientRequest.Credentials = certificate;
29             ftpClientRequest.KeepAlive = true;
30             ftpClientRequest.UseBinary = true;
31             ftpClientRequest.UsePassive = true;
32             ftpClientRequest.Method = method;
33
34             //ftpClientRequest.Timeout = -1;
35
36             return ftpClientRequest;
37         }
38    #region 支持断点续传
39
40         public bool UploadFile(string sourceFile, Uri destinationPath, int offSet,string ftpMethod)
41         {
42             try
43             {
44                 FileInfo file = new FileInfo(sourceFile);
45                 Uri uri = new Uri(destinationPath.AbsoluteUri + "/" + file.Name);
46                 FtpWebRequest request = CreateFtpWebRequest(uri, ftpMethod);
47                 request.ContentOffset = offSet;
48                 Stream requestStream = request.GetRequestStream();//需要获取文件的流
49                 FileStream fileStream = new FileStream(sourceFile, FileMode.Open, FileAccess.Read);//创建存储文件的流
50                 int sourceLength = (int)fileStream.Length;
51                 offSet = CopyDataToDestination(fileStream, requestStream, offSet);
52                 WebResponse response = request.GetResponse();
53                 response.Close();
54                 if (offSet != 0)
55                 {
56                     UploadFile(sourceFile, destinationPath, offSet, WebRequestMethods.Ftp.AppendFile);
57                 }
58             }
59             catch(Exception ex)
60             {
61                 ex.ToString();
62                 return false;
63             }
64
65             return true;
66         }
67
68         private int CopyDataToDestination(Stream sourceStream, Stream destinationStream, int offSet)
69         {
70             try
71             {
72                 int sourceLength = (int)sourceStream.Length;
73                 int length = sourceLength - offSet;
74                 byte[] buffer = new byte[length + offSet];
75                 int bytesRead = sourceStream.Read(buffer, offSet, length);
76                 while (bytesRead != 0)
77                 {
78                     destinationStream.Write(buffer, 0, bytesRead);
79                     bytesRead = sourceStream.Read(buffer, 0, length);
80                     length = length - bytesRead;
81                     offSet = (bytesRead == 0) ? 0 : (sourceLength - length);//(length - bytesRead);                  
82                 }
83             }
84             catch(Exception ex)
85             {
86                 string error = ex.ToString();
87                 return offSet;
88             }
89             finally
90             {
91                 destinationStream.Close();
92                 sourceStream.Close();
93             }
94             return offSet;
95         }
96      #endregion
97     }

//这里是一段上面的测试代码
private FtpClientService ftpClient;

[TestMethod]
        public void UploadFileSupportFitfulTest()
        {
            ftpClient = new FtpClientService();
                       ftpClient.UploadFile(@"\\10.16.174.31\NeweggPictures\newEgg\ProdTourOff.gif", new Uri("ftp://10.16.50.189/SlaveImageServer/NewEgg/GroupFTPTest/"), 0, WebRequestMethods.Ftp.UploadFile);
        }

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-70893-1-1.html 上篇帖子: C# FTP类,以前优化过一次,增加了对编码的识别,今天新增了主被动模式 下篇帖子: FtpWebResponse实现ftp文件上传碰到的小问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表