LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

[ASP.NET]web实现用FTP上传、下载文件(附源码)

admin
2020年5月22日 9:48 本文热度 3052

文章配套源码下载地址:
附件:aspx_net_ftp_code.rar


index.aspx 页:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="index.aspx.cs" Inherits="index" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <title>ASP.NET的FTP上传和下载</title>

    <script src="http://code.jquery.com/jquery-latest.js"></script>

</head>

<body>

    <form id="form1" runat="server">

        <div>

            <asp:FileUpload runat="server" ID="FileUpload"></asp:FileUpload>  

            <asp:Button ID="Button1" runat="server" Text="FTP上传" OnClick="Button1_Click" />  

            <asp:Button ID="Button2" runat="server" Text="刷新列表" OnClick="Button2_Click" />

            <br />

            <br />

            <table border="1" width="1000">

                <tr>

                    <th>编号</th>

                    <th>文件夹</th>

                    <th>文件名</th>

                    <th>日期</th>

                    <th>http协议下载</th>

                    <th>ftp协议下载</th>

                </tr>

                <asp:Repeater runat="server" ID="Repeater1">

                    <ItemTemplate>

                        <tr>

                            <td><%#Eval("fileNo") %></td>

                            <td><%#Eval("ftpURI") %></td>

                            <td><%#Eval("fileName") %></td>

                            <td><%#Eval("datetime") %></td>

                            <td><a target="_blank" href='http://djk8888csdn.3vcm.net/<%#Eval("ftpURI") %>/<%#Eval("fileName") %>'>http://djk8888csdn.3vcm.net/<%#Eval("ftpURI") %>/<%#Eval("fileName") %></a></td>                            

                            <td><input type="button" value="下载" οnclick=ftpDownload('<%#Eval("ftpURI") %>','<%#Eval("fileName") %>') /></td>

                        </tr>

                    </ItemTemplate>

                </asp:Repeater>

            </table>

        </div>

    </form>

</body>

</html>

<script type="text/javascript">

    function ftpDownload(uri, name) {

        $.get("ftpDownload.ashx",

            { ftpURI: uri, fileName: name },

            function (e) {

                if (e == "ok") {

                    alert("下载成功!文件在:\r\n C:\\" + name);

                }

                else {

                    alert("下载失败:\r\n" + e);

                }

            });

    }

</script>


index.aspx.cs 页:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;
 
/// <summary>
/// 这是一个完整的例子
/// </summary>
public partial class index : System.Web.UI.Page
{
    static string strfile = "info.txt";//txt文件名
    string txtPath = HttpContext.Current.Server.MapPath(strfile);//相对路径转绝对路径
    string strout = string.Empty;//txt文件里读出来的内容      
 
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Bind();
        }
    }
    //刷新列表
    protected void Button2_Click(object sender, EventArgs e)
    {
        Bind();
    }
    private void Bind()
    {
        //string txt = File.ReadAllText(txtPath, Encoding.Default);//如果txt内容较少可用此法                 
        if (File.Exists(txtPath))
        {
            using (StreamReader sr = new StreamReader(System.Web.HttpContext.Current.Server.MapPath(strfile), System.Text.Encoding.Default))
            {
                strout = sr.ReadToEnd();
                string temp = strout.Replace("\r\n", "");
                string[] strArr = temp.Split(';');//分解每一组数据                            
                if (strArr != null && strArr.Any())
                {
                    int fileNo = 1;
                    List<Info> list = new List<Info>();
                    foreach (var item in strArr)
                    {
                        if (!string.IsNullOrEmpty(item) && !string.IsNullOrWhiteSpace(item))
                        {
                            string[] strArr2 = item.Split('│');//分解每一个属性
                            Info info = new Info();
                            info.fileNo = fileNo; fileNo++;
                            info.ftpURI = strArr2[0].ToString();
                            info.fileName = strArr2[1].ToString();
                            info.datetime = DateTime.Parse(strArr2[2].ToString());
                            list.Add(info);
                        }
                    }
                    if (list != null && list.Any())
                    {
                        this.Repeater1.DataSource = list.OrderByDescending(a => a.datetime);
                        this.Repeater1.DataBind();
                    }
                }
            }
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        string errorMsg = "";
        if (FileUpload.HasFile)
        {
            int fileLength = FileUpload.PostedFile.ContentLength;//文件大小,单位byte
            string fileName = Path.GetFileName(FileUpload.PostedFile.FileName);//文件名称
            string extension = Path.GetExtension(FileUpload.PostedFile.FileName).ToLower();//文件扩展名
            //限制上传文件最大不能超过500M  
            if (!(fileLength < 512 * 1024 * 1024))
            {
                Response.Write("<script>alert('文件最大不能超过500M!');</script>");
                return;
            }
            //限制文件格式
            if (!".doc.docx.xls.xlsx.pdf.txt.jpg.jpeg".Contains(extension))
            {
                Response.Write("<script>alert('不支持的文件格式!');</script>");
                return;
            }
            //创建文件夹
            string ftpURI = DateTime.Now.ToString("yyyyMMdd");//以日期作为文件夹名称
            try
            {
                FtpWeb.CreateDirectory(ftpURI);//创建文件夹
            }
            catch { }
            //准备上传文件
            Stream fileStream = null;
            try
            {
                fileStream = FileUpload.PostedFile.InputStream;//读取本地文件流
                var b = FtpWeb.Upload(ftpURI, fileName, fileLength, fileStream, out errorMsg);//开始上传
                if (b)
                {
                    if (File.Exists(txtPath))
                    {
                        FileStream myStream = new FileStream(txtPath, FileMode.Append, FileAccess.Write);// FileMode.Append,追加一行数据
                        StreamWriter sw = new StreamWriter(myStream);
                        sw.WriteLine(ftpURI + "│" + fileName + "│" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ";");//写入文件
                        sw.Close();
                    }
                    Bind();
                    Response.Write("<script>alert('上传成功!');</script>");
                }
                else
                {
                    Response.Write("<script>alert('上传失败!" + errorMsg + "');</script>");
                }
            }
            catch (Exception ex)
            {
                Response.Write("<script>alert('上传失败!" + ex.ToString() + "');</script>");
            }
            finally
            {
                if (fileStream != null) fileStream.Close();
            }
        }
        else
        {
            Response.Write("<script>alert('请选择一个文件再上传!');</script>");
        }
    }
    public class Info
    {
        public int fileNo { get; set; }
        public string ftpURI { get; set; }
        public string fileName { get; set; }
        public DateTime datetime { get; set; }
    }
}

ftpDownload.ashx 页:

<%@ WebHandler Language="C#" Class="ftpDownload" %>

using System;

using System.Web;

public class ftpDownload : IHttpHandler

{

    /// <summary>

    /// ftp协议下载文件

    /// </summary>

    /// <param name="context"></param>

    public void ProcessRequest(HttpContext context)

    {

        context.Response.ContentType = "text/plain";

        string ftpURI = context.Request.QueryString["ftpURI"];//ftpURI

        string fileName = context.Request.QueryString["fileName"];//fileName

        string localPath = "C:\\";//文件下载路径(可自定义)

        string errorMsg = "";

        bool b = FtpWeb.Download(ftpURI, localPath, fileName, out errorMsg);

        if (b)

        {

            context.Response.Write("ok");

        }

        else

        {

            context.Response.Write(errorMsg);

        }

    }

 

    public bool IsReusable

    {

        get

        {

            return false;

        }

    }

}


FtpWeb.cs 页:

using System;
using System.IO;
using System.Net;
 
/// <summary>
/// web地址:   http://djk8888csdn.3vcm.net/
/// FTP地址: ftp://013.3vftp.com/
/// FTP账号: djk8888csdn
/// FTP密码: 123456  
/// </summary>
public class FtpWeb
{
    public static string ftpHost = "ftp://013.3vftp.com/";//FTP的ip地址或域名 
    public static string ftpUserID = "djk8888csdn";//ftp账号
    public static string ftpPassword = "123456";//ftp密码
 
    /// <summary>
    /// 上传
    /// </summary>
    /// <param name="ftpURI">ftp上的路径</param>
    /// <param name="filename">ftp上的文件名</param>
    /// <param name="fileLength">文件大小</param>
    /// <param name="localStream">本地文件流</param>
    /// <param name="errorMsg">报错信息</param>
    /// <returns></returns>
    public static bool Upload(string ftpURI, string filename, int fileLength, Stream localStream, out string errorMsg)
    {
        errorMsg = "";
        Stream fileStream = null;//本地文件流
        Stream requestStream = null;//ftp文件流      
        try
        {
            fileStream = localStream;//本地文件流
 
            Uri uri = new Uri(ftpHost + ftpURI + "/" + filename);//ftp完整路径
            FtpWebRequest uploadRequest = (FtpWebRequest)WebRequest.Create(uri);//创建FtpWebRequest实例uploadRequest  
            uploadRequest.Method = WebRequestMethods.Ftp.UploadFile;//将FtpWebRequest属性设置为上传文件  
            uploadRequest.Credentials = new NetworkCredential(ftpUserID, ftpPassword);//认证FTP用户名密码  
            requestStream = uploadRequest.GetRequestStream();//ftp上的空文件
 
            int buffLength = 2048; //开辟2KB缓存区  
            byte[] buff = new byte[buffLength];
            int contentLen;
            contentLen = fileStream.Read(buff, 0, buffLength);
 
            while (contentLen != 0)
            {
                requestStream.Write(buff, 0, contentLen);//将本地文件流写入到ftp上的空文件中去
                contentLen = fileStream.Read(buff, 0, buffLength);
            }
            requestStream.Close();
            fileStream.Close();
            return true;
        }
        catch (Exception ex)
        {
            errorMsg = ex.Message;
            return false;
        }
        finally
        {
            if (fileStream != null) fileStream.Close();
            if (requestStream != null) requestStream.Close();
        }
    }
    //创建文件夹
    public static string CreateDirectory(string ftpDir)
    {
        FtpWebRequest request = SetFtpConfig(WebRequestMethods.Ftp.MakeDirectory, ftpDir);
        FtpWebResponse response = (FtpWebResponse)request.GetResponse();
        return response.StatusDescription;
    }
    private static FtpWebRequest SetFtpConfig(string method, string ftpDir)
    {
        return SetFtpConfig(method, ftpDir, "");
    }
    private static FtpWebRequest SetFtpConfig(string method, string ftpDir, string fileName)
    {
        ftpDir = string.IsNullOrEmpty(ftpDir) ? "" : ftpDir.Trim();
        return SetFtpConfig(ftpHost, ftpUserID, ftpPassword, method, ftpDir, fileName);
    }
 
    private static FtpWebRequest SetFtpConfig(string host, string username, string password, string method, string RemoteDir, string RemoteFileName)
    {
        System.Net.ServicePointManager.DefaultConnectionLimit = 50;
        FtpWebRequest request = (FtpWebRequest)WebRequest.Create(host + RemoteDir + "/" + RemoteFileName);
        request.Method = method;
        request.Credentials = new NetworkCredential(username, password);
        request.UsePassive = false;
        request.UseBinary = true;
        request.KeepAlive = false;
        return request;
    }
    /// <summary>
    /// FTP文件下载(代码仅供参考)
    /// </summary>
    /// <param name="ftpURI">fpt文件路径</param>
    /// <param name="localPath">本地文件路径</param>
    /// <param name="fileName">ftp文件名</param>
    /// <param name="errorMsg">报错信息</param>
    /// <returns></returns>
    public static bool Download(string ftpURI, string localPath, string fileName, out string errorMsg)
    {
        errorMsg = "";
        FtpWebRequest reqFTP = null;
        FileStream outputStream = null;
        Stream ftpStream = null;
        FtpWebResponse response = null;
        try
        {
            outputStream = new FileStream(localPath + "/" + fileName, FileMode.Create);//创建本地空文件
 
            Uri uri = new Uri(ftpHost + ftpURI + "/" + fileName);//ftp完整路径
            reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri);
            reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
            reqFTP.UseBinary = true;
            reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);//登录ftp
            response = (FtpWebResponse)reqFTP.GetResponse();
            ftpStream = response.GetResponseStream();//读取ftp上文件流
            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);//将ftp文件流写入到本地空文件中去
                readCount = ftpStream.Read(buffer, 0, bufferSize);
            }
            return true;
        }
        catch (Exception ex)
        {
            errorMsg = ex.Message;
            return false;
        }
        finally
        {
            if (ftpStream != null) ftpStream.Close();
            if (outputStream != null) outputStream.Close();
            if (response != null) response.Close();
        }
    }
}

文章配套源码下载地址:
附件:aspx_net_ftp_code.rar


该文章在 2020/5/22 10:02:43 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved