- 就我知道而言 winform上传文件有两种方式
- 1种用FTP。这个方式比较推荐的方式。只是复杂一点。需要架设FTP服务器。还必须FTP好多API要了解。
- 但是功能比较强大。在客户端能操作服务器上任何文件,可以新建文件夹。
- 2用WebClient控件 服务器用ASP.NET或者JSP方式。其实就是我们常用的HTML浏览本地文件然后上传的功能。只不过客户端用一个控件代替了。但是服务器端还必须要ASP.NET页面来接收这个文件。这个方式客户端不能实现文件管理。文件管理都必须在服务器的ASP.NET页面里面来做管理。
- 3还一个方式是HttpWebRequest.但是这个方式的原理还是WebClient。还是直接推荐用WebClient。不推荐用HttpWebRequest
- 1:FTP方式。通过在IIS里架设FTP服务器。代码
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Net;
- using System.IO;
- using System.Windows.Forms;
- namespace net.emice.TEST1
- {
- class FtpUpDown
- {
- string ftpServerIP;
- public string FtpServerIP
- {
- get { return ftpServerIP; }
- set { ftpServerIP = value; }
- }
- string ftpUserID;
- public string FtpUserID
- {
- get { return ftpUserID; }
- set { ftpUserID = value; }
- }
- string ftpPassword;
- public string FtpPassword
- {
- get { return ftpPassword; }
- set { ftpPassword = value; }
- }
- FtpWebRequest reqFTP;
- private void Connect(String path)//连接ftp
- {
- // 根据uri创建FtpWebRequest对象
- reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path));
- // 指定数据传输类型
- reqFTP.UseBinary = true;
- // ftp用户名和密码
- reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
- }
- public FtpUpDown(string ftpServerIP, string ftpUserID, string ftpPassword)
- {
- this.ftpServerIP = ftpServerIP;
- this.ftpUserID = ftpUserID;
- this.ftpPassword = ftpPassword;
- }
- //都调用这个
- private string[] GetFileList(string path, string WRMethods)//上面的代码示例了如何从ftp服务器上获得文件列表
- {
- string[] downloadFiles;
- StringBuilder result = new StringBuilder();
- try
- {
- Connect(path);
- reqFTP.Method = WRMethods;
- WebResponse response = reqFTP.GetResponse();
- StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.Default);//中文文件名
- string line = reader.ReadLine();
- while (line != null)
- {
- result.Append(line);
- result.Append("/n");
- line = reader.ReadLine();
- }
- // to remove the trailing '/n'
- result.Remove(result.ToString().LastIndexOf('/n'), 1);
- reader.Close();
- response.Close();
- return result.ToString().Split('/n');
- }
- catch (Exception ex)
- {
- System.Windows.Forms.MessageBox.Show(ex.Message);
- downloadFiles = null;
- return downloadFiles;
- }
- }
- public string[] GetFileList(string path)//上面的代码示例了如何从ftp服务器上获得文件列表
- {
- return GetFileList("ftp://" + ftpServerIP + "/" + path, WebRequestMethods.Ftp.ListDirectory);
- }
- public string[] GetFileList()//上面的代码示例了如何从ftp服务器上获得文件列表
- {
- return GetFileList("ftp://" + ftpServerIP + "/", WebRequestMethods.Ftp.ListDirectory);
- }
- public string Upload(string filename) //上面的代码实现了从ftp服务器上载文件的功能
- {
- FileInfo fileInf = new FileInfo(filename);
- string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
- Connect(uri);//连接
- // 默认为true,连接不会被关闭
- // 在一个命令之后被执行
- reqFTP.KeepAlive = false;
- // 指定执行什么命令
- reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
- // 上传文件时通知服务器文件的大小
- reqFTP.ContentLength = fileInf.Length;
- // 缓冲大小设置为kb
- int buffLength = 2048;
- byte[] buff = new byte[buffLength];
- int contentLen;
- // 打开一个文件流(System.IO.FileStream) 去读上传的文件
- FileStream fs = fileInf.OpenRead();
- try
- {
- // 把上传的文件写入流
- Stream strm = reqFTP.GetRequestStream();
- // 每次读文件流的kb
- contentLen = fs.Read(buff, 0, buffLength);
- // 流内容没有结束
- while (contentLen != 0)
- {
- // 把内容从file stream 写入upload stream
- strm.Write(buff, 0, contentLen);
- contentLen = fs.Read(buff, 0, buffLength);
- }
- // 关闭两个流
- strm.Close();
- fs.Close();
- return "";
- }
- catch (Exception ex)
- {
- return "Upload Error"+ex.Message;
- }
- }
- public string Download(string filePath, string fileName)上面的代码实现了从ftp服务器下载文件的功能
- {
- try
- {
- String onlyFileName = Path.GetFileName(fileName);
- string newFileName = filePath + "//" + onlyFileName;
- if (File.Exists(newFileName))
- {
- return "本地文件" + newFileName + "已存在,无法下载";
- }
- string url = "ftp://" + ftpServerIP + "/" + fileName;
- Connect(url);//连接
- reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
- FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
- Stream ftpStream = response.GetResponseStream();
- long cl = response.ContentLength;
- int bufferSize = 2048;
- int readCount;
- byte[] buffer = new byte[bufferSize];
- readCount = ftpStream.Read(buffer, 0, bufferSize);
- FileStream outputStream = new FileStream(newFileName, FileMode.Create);
- while (readCount > 0)
- {
- outputStream.Write(buffer, 0, readCount);
- readCount = ftpStream.Read(buffer, 0, bufferSize);
- }
- ftpStream.Close();
- outputStream.Close();
- response.Close();
- return "";
- }
- catch (Exception ex)
- {
- return "因"+ex.Message+",无法下载";
- }
- }
- //删除文件
- public void DeleteFileName(string fileName)
- {
- try
- {
- FileInfo fileInf = new FileInfo(fileName);
- string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
- Connect(uri);//连接
- // 默认为true,连接不会被关闭
- // 在一个命令之后被执行
- reqFTP.KeepAlive = false;
- // 指定执行什么命令
- reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;
- FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
- response.Close();
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message, "删除错误");
- }
- }
- //创建目录
- public string MakeDir(string dirName)
- {
- try
- {
- string uri = "ftp://" + ftpServerIP + "/" + dirName;
- Connect(uri);//连接
- reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
- FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
- response.Close();
- return "";
- }
- catch (WebException ex)
- {
- return "[Make Dir]"+ex.Message;
- }
- }
- //删除目录
- public void delDir(string dirName)
- {
- try
- {
- string uri = "ftp://" + ftpServerIP + "/" + dirName;
- Connect(uri);//连接
- reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory;
- FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
- response.Close();
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message);
- }
- }
- //获得文件大小
- public long GetFileSize(string filename)
- {
- long fileSize = 0;
- try
- {
- FileInfo fileInf = new FileInfo(filename);
- string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
- Connect(uri);//连接
- reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;
- FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
- fileSize = response.ContentLength;
- response.Close();
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message);
- }
- return fileSize;
- }
- //文件改名
- public void Rename(string currentFilename, string newFilename)
- {
- try
- {
- FileInfo fileInf = new FileInfo(currentFilename);
- string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
- Connect(uri);//连接
- reqFTP.Method = WebRequestMethods.Ftp.Rename;
- reqFTP.RenameTo = newFilename;
- FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
- //Stream ftpStream = response.GetResponseStream();
- //ftpStream.Close();
- response.Close();
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message);
- }
- }
- //获得文件明晰
- public string[] GetFilesDetailList()
- {
- return GetFileList("ftp://" + ftpServerIP + "/", WebRequestMethods.Ftp.ListDirectoryDetails);
- }
- //获得文件明晰
- public string[] GetFilesDetailList(string path)
- {
- return GetFileList("ftp://" + ftpServerIP + "/" + path, WebRequestMethods.Ftp.ListDirectoryDetails);
- }
- }
- }
Winform 上传文件(ftp方式)
最新推荐文章于 2021-12-06 16:30:01 发布