最近做了个仿网易的图片上传控件,为ftp上传伤了不少脑筋。在网上找了很多这方面的资料,但都不是很理想。后来在codeproject上找到了个老外写的图片上传控件,在上面剽窃了段代码过来用,没有国内网友发的那么多累赘代码,效果也很好!
- private void Upload(string filename)
- {
- FileInfo fileInf = new FileInfo(filename);
- string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
- FtpWebRequest reqFTP;
- // Create FtpWebRequest object from the Uri provided
- reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/wwwroot/upload/test/" + fileInf.Name));
- // Provide the WebPermission Credintials
- reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
- // By default KeepAlive is true, where the control connection is not closed
- // after a command is executed.
- reqFTP.KeepAlive = false;
- // Specify the command to be executed.
- reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
- // Specify the data transfer type.
- reqFTP.UseBinary = true;
- // Notify the server about the size of the uploaded file
- reqFTP.ContentLength = fileInf.Length;
- // The buffer size is set to 2kb
- int buffLength = 2048;
- byte[] buff = new byte[buffLength];
- int contentLen;
- // Opens a file stream (System.IO.FileStream) to read the file to be uploaded
- FileStream fs = fileInf.OpenRead();
- try
- {
- // Stream to which the file to be upload is written
- Stream strm = reqFTP.GetRequestStream();
- // Read from the file stream 2kb at a time
- contentLen = fs.Read(buff, 0, buffLength);
- // Till Stream content ends
- while (contentLen != 0)
- {
- // Write Content from the file stream to the FTP Upload Stream
- strm.Write(buff, 0, contentLen);
- contentLen = fs.Read(buff, 0, buffLength);
- }
- // Close the file stream and the Request Stream
- strm.Close();
- fs.Close();
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message, "Upload Error");
- }
- }