读书人

FTP远程上传的有关问题

发布时间: 2012-03-21 13:33:15 作者: rapoo

FTP远程上传的问题
我已经知道远程服务器的FTP 密码和端口 怎样用C#语言实现 把文件通过FTP传到远程服务器 我是新手 各位大侠不要笑话

[解决办法]

C# code
using System;using System.Net;using System.Threading;using System.IO;namespace Examples.System.Net{    public class FtpState    {        private ManualResetEvent wait;        private FtpWebRequest request;        private string fileName;        private Exception operationException = null;        string status;                public FtpState()        {            wait = new ManualResetEvent(false);        }                public ManualResetEvent OperationComplete        {            get {return wait;}        }                public FtpWebRequest Request        {            get {return request;}            set {request = value;}        }                public string FileName        {            get {return fileName;}            set {fileName = value;}        }        public Exception OperationException        {            get {return operationException;}            set {operationException = value;}        }        public string StatusDescription        {            get {return status;}            set {status = value;}        }    }    public class AsynchronousFtpUpLoader    {          // Command line arguments are two strings:        // 1. The url that is the name of the file being uploaded to the server.        // 2. The name of the file on the local machine.        //        public static void Main(string[] args)        {            // Create a Uri instance with the specified URI string.            // If the URI is not correctly formed, the Uri constructor            // will throw an exception.            ManualResetEvent waitObject;                        Uri target = new Uri (args[0]);            string fileName = args[1];            FtpState state = new FtpState();            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(target);            request.Method = WebRequestMethods.Ftp.UploadFile;                        // This example uses anonymous logon.            // The request is anonymous by default; the credential does not have to be specified.             // The example specifies the credential only to            // control how actions are logged on the server.                        request.Credentials = new NetworkCredential ("anonymous","janeDoe@contoso.com");                        // Store the request in the object that we pass into the            // asynchronous operations.            state.Request = request;            state.FileName = fileName;                        // Get the event to wait on.            waitObject = state.OperationComplete;                        // Asynchronously get the stream for the file contents.            request.BeginGetRequestStream(                new AsyncCallback (EndGetStreamCallback),                 state            );                        // Block the current thread until all operations are complete.            waitObject.WaitOne();                        // The operations either completed or threw an exception.            if (state.OperationException != null)            {                throw state.OperationException;            }            else            {                Console.WriteLine("The operation completed - {0}", state.StatusDescription);            }        }        private static void EndGetStreamCallback(IAsyncResult ar)        {            FtpState state = (FtpState) ar.AsyncState;                        Stream requestStream = null;            // End the asynchronous call to get the request stream.            try            {                requestStream = state.Request.EndGetRequestStream(ar);                // Copy the file contents to the request stream.                const int bufferLength = 2048;                byte[] buffer = new byte[bufferLength];                int count = 0;                int readBytes = 0;                FileStream stream = File.OpenRead(state.FileName);                do                {                    readBytes = stream.Read(buffer, 0, bufferLength);                    requestStream.Write(buffer, 0, readBytes);                    count += readBytes;                }                while (readBytes != 0);                Console.WriteLine ("Writing {0} bytes to the stream.", count);                // IMPORTANT: Close the request stream before sending the request.                requestStream.Close();                // Asynchronously get the response to the upload request.                state.Request.BeginGetResponse(                    new AsyncCallback (EndGetResponseCallback),                     state                );            }             // Return exceptions to the main application thread.            catch (Exception e)            {                Console.WriteLine("Could not get the request stream.");                state.OperationException = e;                state.OperationComplete.Set();                return;            }                   }                // The EndGetResponseCallback method          // completes a call to BeginGetResponse.        private static void EndGetResponseCallback(IAsyncResult ar)        {            FtpState state = (FtpState) ar.AsyncState;            FtpWebResponse response = null;            try             {                response = (FtpWebResponse) state.Request.EndGetResponse(ar);                response.Close();                state.StatusDescription = response.StatusDescription;                // Signal the main application thread that                 // the operation is complete.                state.OperationComplete.Set();            }            // Return exceptions to the main application thread.            catch (Exception e)            {                Console.WriteLine ("Error getting response.");                state.OperationException = e;                state.OperationComplete.Set();            }        }    }} 


[解决办法]

C# code
using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;using System.Net;using System.IO;using System.Text;namespace ftp{    class ftp    {        public static bool ftp_Upload(string FtpURL, string username, string password, string FileName)        {            string strTemp = FileName;            strTemp = strTemp.Substring(strTemp.LastIndexOf(@"\") + 1);//截取文件名             Stream requestStream = null;            FileStream fileStream = null;            FtpWebResponse uploadResponse = null;            try            {                string uu = "ftp://" + FtpURL + strTemp;                FtpWebRequest uploadRequest = (FtpWebRequest)WebRequest.Create(uu);//创建完整的FTP服务地址                uploadRequest.Method = WebRequestMethods.Ftp.UploadFile;  //设置FTP服务的操作为上载文件                  uploadRequest.Proxy = null;     //服务器通信代理                //设置用户名和密码                uploadRequest.Credentials = new NetworkCredential(username, password);//用户名和密码                requestStream = uploadRequest.GetRequestStream();                fileStream = File.Open(FileName, FileMode.Open);//打开指定路径的文件                byte[] buffer = new byte[4096];                int nRead;                while (true)//读取已打开文件的字节流写入缓冲区直至读取完毕                {                    nRead = fileStream.Read(buffer, 0, buffer.Length);                    if (nRead == 0)                        break;                    requestStream.Write(buffer, 0, buffer.Length);                }                fileStream.Close();                requestStream.Close();                uploadResponse = (FtpWebResponse)uploadRequest.GetResponse();//服务器返回响应            }            catch (Exception e)            {                MainForm.AddViewListValue("上传ftp失败" + e.Message, 5);                return false;            }            finally            {                if (uploadResponse != null)                    uploadResponse.Close();                if (fileStream != null)                    fileStream.Close();                if (requestStream != null)                    requestStream.Close();            }            return true;        }    }} 

读书人网 >C#

热点推荐