C# 之 FTP服务器中文件上传与下载(二)

来源:互联网 发布:matlab编程题 编辑:程序博客网 时间:2024/05/24 02:47

        通过上一篇博客《C# 之 FTP服务器中文件上传与下载(一)》,我们已经创建好了一个FTP服务器,并且该服务器需要用户名和密码的验证。今天我们来实现文件的上传。


首先,我们前台需要一个FileUpload控件和一个Button控件

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!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></title></head><body>    <form id="form1" runat="server">    <div>    <asp:FileUpload ID="fuImage" runat="server" Width="400px" />    <asp:Button runat="server" ID="btnUpLoad" Text="上传" CssClass="nButton" OnClick="btnUpLoad_Click" />    </div>    </form></body></html>


然后我们开始编写后台的上传代码

using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;public partial class _Default : System.Web.UI.Page{    protected void Page_Load(object sender, EventArgs e)    {    }    protected void btnUpLoad_Click(object sender, EventArgs e)    {        string strFtpPath = "FTP://192.168.1.100:21";   //ftp地址        string strUserName = "hehe";    //用户名        string strPassword = "123456";  //密码          Boolean flag = false;        string strFullName = "";        if (fuImage.PostedFile.FileName != "")        {            strFullName = fuImage.PostedFile.FileName;  //所选择文件的路径        }        else        {            Response.Write("<script>alert('请选择要上传的文件!');</script>");        }        //上传文件        System.IO.FileInfo fileInfo = new System.IO.FileInfo(fuImage.PostedFile.FileName);        flag=UploadFile(fileInfo, strFtpPath, strUserName, strPassword);        if (flag==true)        {            Response.Write("<script>alert('文件上传成功!');</script>");        }        else        {            Response.Write("<script>alert('文件上传失败!');</script>");        }    }    /// <summary>    /// 上传文件    /// </summary>    /// <param name="fileinfo">需要上传的文件</param>    /// <param name="targetDir">目标路径</param>    /// <param name="hostname">ftp地址</param>    /// <param name="username">ftp用户名</param>    /// <param name="password">ftp密码</param>    /// <returns></returns>    public static Boolean UploadFile(System.IO.FileInfo fileinfo, string hostname, string username, string password)    {        string strExtension = System.IO.Path.GetExtension(fileinfo.FullName);        string strFileName="";        strFileName = fileinfo.Name;    //获取文件的文件名        string URI = hostname + "/" + strFileName;        //获取ftp对象        System.Net.FtpWebRequest ftp = GetRequest(URI, username, password);        //设置ftp方法为上传        ftp.Method = System.Net.WebRequestMethods.Ftp.UploadFile;        //制定文件传输的数据类型        ftp.UseBinary = true;        ftp.UsePassive = true;        //文件大小        ftp.ContentLength = fileinfo.Length;        //缓冲大小设置为2kb        const int BufferSize = 2048;        byte[] content = new byte[BufferSize - 1 + 1];        int dataRead;        //打开一个文件流(System.IO.FileStream)去读上传的文件        using (System.IO.FileStream fs = fileinfo.OpenRead())        {            try            {                //把上传的文件写入流                using (System.IO.Stream rs = ftp.GetRequestStream())                {                    do                    {                        //每次读文件流的2KB                        dataRead = fs.Read(content, 0, BufferSize);                        rs.Write(content, 0, dataRead);                    } while (!(dataRead < BufferSize));                    rs.Close();                    return true;                }            }            catch (Exception ex)            {                ftp = null;                ftp = GetRequest(URI, username, password);                ftp.Method = System.Net.WebRequestMethods.Ftp.DeleteFile;//删除                ftp.GetResponse();                return false;            }            finally            {                fs.Close();            }        }    }    /// <summary>    /// 得到ftp对象    /// </summary>    /// <param name="URI">ftp地址</param>    /// <param name="username">ftp用户名</param>    /// <param name="password">ftp密码</param>    /// <returns>返回ftp对象</returns>    private static System.Net.FtpWebRequest GetRequest(string URI, string username, string password)    {        //根据服务器信息FtpWebRequest创建类的对象        FtpWebRequest result = (FtpWebRequest)FtpWebRequest.Create(URI);        //提供身份验证信息        result.Credentials = new System.Net.NetworkCredential(username, password);        //result.Credentials = new System.Net.NetworkCredential();        //设置请求完成之后是否保持到FTP服务器的控制连接,默认值为true        result.KeepAlive = false;        return result;    }}


最后看看我们运行的效果吧


点击浏览,选择我们需要上传的文件



点击上传,上传我们选择的文件


最后我们看看我们的ftp服务器中该文件是否已经上传






        文件上传就这样上传成功了,我这里的上传可以上传我们所有的文件,当然我们也可以前台通过JS来控制我们只能上传什么样的格式,这个就让大家自己去寻找一下答案吧。





1 0
原创粉丝点击