asp.net实现ftp上传代码(解决大文件上传问题)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using System.IO;
using System.Net;
using System.Text;

public partial class FileUpload : System.Web.UI.Page
{
    //配置在web.config
    private string ftpServerIP = "127.0.0.1";//服务器IP
    private string ftpUserID = "testName";   //用户名
    private string ftpPassword = "123456";   //密码
    private string path = "E:\\";
     protected void Page_Load(object sender, EventArgs e)
    {
      

    }

    #region 文件上传
    /// <summary>
    /// FTP上传
    /// </summary>
    /// <param name="fileName"></param>
    private void UpLoad(string fileName)
    {
        FileInfo fileInf = new FileInfo(fileName);
        //获得本地文件的修改日期
        DateTime lastWriteTime = fileInf.LastWriteTime;
        string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
        FtpWebRequest reqFTP;
        //根据url创建ftpWebRequest对象
        reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileInf.Name));
        //ftp用户名和密码
        reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
        //默认为true,连接不会关闭
        //在一个命令后被执行
        reqFTP.KeepAlive = false;
        //指定执行什么命令
        reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
        //指定数据传输类型binary二进制
        reqFTP.UseBinary = true;
        //上传文件时通知服务器文件的大小
        reqFTP.ContentLength = fileInf.Length;
        //缓冲大小设置为2kb
        int bufflength = 2048;
        byte[] buff = new byte[bufflength];
        int contentlen;
        //打开一个文件流(System.IO.FileStream)去读上传的文件
        FileStream fs = fileInf.OpenRead();
        try
        {
            //上传文件写入流
            Stream strm = reqFTP.GetRequestStream();
            //每次读取文件流的2kb
            contentlen = fs.Read(buff, 0, bufflength);
            //流内容没有结束
            while (contentlen != 0)
            {
                strm.Write(buff, 0, contentlen);
                contentlen = fs.Read(buff, 0, bufflength);
            }
            strm.Close();
            fs.Close();
            this.Page.RegisterStartupScript("", "<script>alert('成功')</script>");
        }
        catch (Exception ex)
        {
            Response.Write("upload error" + ex.Message);
        }
    }
    #endregion

    #region FTP服务器下载文件
    /// <summary>
    /// FTP服务器下载文件
    /// </summary>
    /// <param name="filePath"></param>
    /// <param name="fileName"></param>
    private void Download(string filePath, string fileName)
    {
        FtpWebRequest reqFTP;
        try
        {
            FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);
            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileName));
            reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
            reqFTP.UseBinary = true;
            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);
            while (readCount > 0)
            {
                outputStream.Write(buffer, 0, readCount);
                readCount = ftpStream.Read(buffer, 0, bufferSize);
            }
            ftpStream.Close();
            outputStream.Close();
            response.Close();

        }
        catch (Exception ex)
        {
            Response.Write("Download error" + ex.Message);
        }
    }
    #endregion

    #region 从ftp服务器上获得文件列表
    public string[] GetFileList()
    {
        string[] downloadFiles;
        StringBuilder result = new StringBuilder();
        FtpWebRequest reqFTP;
        try
        {
            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/"));
            reqFTP.UseBinary = true;
            reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
            reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
            WebResponse response = reqFTP.GetResponse();
            StreamReader reader = new StreamReader(response.GetResponseStream());
            string line = reader.ReadLine();
            while (line != null)
            {
                result.Append(line);
                result.Append("\n");
                line = reader.ReadLine();
            }
            result.Remove(result.ToString().LastIndexOf('\n'), 1);
            reader.Close();
            response.Close();
            return result.ToString().Split('\n');
        }
        catch (Exception ex)
        {
            downloadFiles = null;
            return downloadFiles;
        }
    }
    #endregion


    protected void BtnUpload_Click(object sender, EventArgs e)
    {
        UpLoad("E:\\test.txt");
    }
    /// <summary>
    /// 通过选择上传按钮事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void BtnUPFile_Click(object sender, EventArgs e)
    {
      
        UpLoadCurrentOrAll();

    }

    public void GetFileNameList()
    {
        string path = "E:\\";

    }
    /// <summary>
    /// 根据条件上传当天文件
    /// </summary>
    /// <param name="fileName"></param>
    private void UpLoadCurrentOrAll( )
    {
        DirectoryInfo dir = new DirectoryInfo(path);
        FileInfo[] files = dir.GetFiles();
        string dateCurrent=DateTime.Now.ToShortDateString();
        foreach (FileInfo fi in files)
        {
            string a = fi.LastWriteTime.ToShortDateString();
            if(a==dateCurrent)
            {
                FileInfo fileInf = new FileInfo(path+fi.Name);
                //获得本地文件的修改日期
                DateTime lastWriteTime = fileInf.LastWriteTime;
                string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
                FtpWebRequest reqFTP;
                //根据url创建ftpWebRequest对象
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileInf.Name));
                //ftp用户名和密码
                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                //默认为true,连接不会关闭
                //在一个命令后被执行
                reqFTP.KeepAlive = false;
                //指定执行什么命令
                reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
                //指定数据传输类型binary二进制
                reqFTP.UseBinary = true;
                //上传文件时通知服务器文件的大小
               // reqFTP.ContentLength = fileInf.Length;
                //缓冲大小设置为2kb
                int bufflength = 2048;
                byte[] buff = new byte[bufflength];
                int contentlen;
                //打开一个文件流(System.IO.FileStream)去读上传的文件
                FileStream fs = fileInf.OpenRead();
                try
                {
                    //上传文件写入流
                    Stream strm = reqFTP.GetRequestStream();
                    //每次读取文件流的2kb
                    contentlen = fs.Read(buff, 0, bufflength);
                    //流内容没有结束
                    while (contentlen != 0)
                    {
                        strm.Write(buff, 0, contentlen);
                        contentlen = fs.Read(buff, 0, bufflength);
                    }
                    strm.Close();
                    fs.Close();
                    this.Page.RegisterStartupScript("", "<script>alert('成功')</script>");
                }
                catch (Exception ex)
                {
                    Response.Write("upload error" + ex.Message);
                }
 
            }
        }
 
    }
 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值