发表于 2015-5-26 12:24:53

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

  

/**//*****************************************************************
// 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
//
*****************************************************************/
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;  


1public 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;
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;


      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]
查看完整版本: Asp.net 2.0中Ftp支持断点续传 源码