通过上一篇博客《C# 之 FTPserver中文件上传与下载(一)》,我们已经创建好了一个FTPserver,而且该server须要username和password的验证。今天我们来实现文件的上传。

首先,我们前台须要一个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)
{
//依据server信息FtpWebRequest创建类的对象
FtpWebRequest result = (FtpWebRequest)FtpWebRequest.Create(URI);
//提供身份验证信息
result.Credentials = new System.Net.NetworkCredential(username, password);
//result.Credentials = new System.Net.NetworkCredential();
//设置请求完毕之后是否保持到FTPserver的控制连接,默认值为true
result.KeepAlive = false;
return result;
}
}

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

点击浏览。选择我们须要上传的文件

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

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

最后我们看看我们的ftpserver中该文件是否已经上传

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

C# 之 FTPserver中文件上传与下载(二)的更多相关文章

  1. C# 之 FTPserver中文件上传与下载(一)

            近期接手这样一个文件上传到ftpserver的一个功能,接下来就给大家解析一下这一功能. 首先,今天我们要讲的是怎么创建一个FTPserver. 1.首先我们创建一个用户,当然不想创建 ...

  2. Http服务器实现文件上传与下载(二)

    一.引言 欢迎大家接着看我的博客,如何大家有什么想法的话回复我哦,闲话不多聊了,接着上一讲的内容来说吧,在上一节中已经讲到了请求头字符串的解析,并且在解析中我我们已经获取了url.就是上节中提到的/d ...

  3. Http服务器实现文件上传与下载(一)

    一.引言 大家都知道web编程的协议就是http协议,称为超文本传输协议.在J2EE中我们可以很快的实现一个Web工程,但在C++中就不是非常的迅速,原因无非就是底层的socket网络编写需要自己完成 ...

  4. jsp\struts1.2\struts2 中文件上传(转)

    jsp\struts1.2\struts2 中文件上传 a.在jsp中简单利用Commons-fileupload组件实现 b.在struts1.2中实现c.在sturts2中实现现在把Code与大家 ...

  5. easyui-dialog中文件上传处理

    function openDialog() { // $('#dlg').dialog('open'); //EasyUi的dialog中文件上传,后台获取不到文件,需要改写为下面这样 $(" ...

  6. layUI框架中文件上传前后端交互及遇到的相关问题

    下面我将讲述一下我在使用layUI框架中文件上传所遇到的问题: 前端jsp页面: <div class="layui-form-item"> <label cla ...

  7. JFinal中文件上传后会默认放置到WebContent的upload包下,但是tomcat会自动重启,当我们再次打开upload文件夹查看我们刚刚上传的文件时,发现上传的文件已经没有了。

    JFinal中文件上传后会默认放置到WebContent的upload包下,但是tomcat会自动重启,当我们再次打开upload文件夹查看我们刚刚上传的文件时,发现上传的文件已经没有了.因为tomc ...

  8. ASP.NET:MVC中文件上传与地址变化处理

    目录 文件的上传和路径处理必须解决下面列出的实际问题: 1.重复文件处理 2.单独文件上传 3.编辑器中文件上传 4.处理文章中的图片路径 5.处理上传地址的变化 一.上传文件和重复文件处理 文件处理 ...

  9. javaWeb中,文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

随机推荐

  1. HTTP Slow Attack测试工具SlowHTTPTest

    HTTP Slow Attack测试工具SlowHTTPTest   Slow Attack是HTTP常见的一种拒绝服务攻击方式.它通过消耗服务器的系统资源和连接数,导致Web服务器无法正常工作.常见 ...

  2. [BZOJ3566][SHOI2014]概率充电器(概率DP)

    题意:树上每个点有概率有电,每条边有概率导电,求每个点能被通到电的概率. 较为套路但不好想的概率DP. 树形DP肯定先只考虑子树,自然的想法是f[i]表示i在只考虑i子树时,能有电的概率,但发现无法转 ...

  3. 【后缀自动机】poj1509 Glass Beads

    字符串最小表示 后缀自动机 O(n) 把串复制一次,链接在后面之后,建立SAM,贪心地在SAM上转移,每次贪心地选择最小的字符,转移的长度为n时停止. 输出时由于要最靠前的,所以要在endpos集合中 ...

  4. 【序列莫队】BZOJ2038- [2009国家集训队]小Z的袜子(hose)

    [题目大意]给出1-N只袜子的颜色,多次询问L-R中选出一双同色袜子的概率. [思路] 裸莫队.基本的莫队步骤:①分组(每组大小为根号sqrt(n),共sqrt(n)组)②排序(左边界分组,右边界在组 ...

  5. 20162318 实验一《Java开发环境的熟悉》实验报告

    北京电子科技学院(BESTI) 实 验 报 告 课程:程序设计与数据结构 班级:1623班 姓名:张泰毓 成绩:2分 指导老师:娄老师.王老师 实验日期:2017年3月17日 实验密级:非密级 实验器 ...

  6. mybatis批量update,返回行数为-1

    mybatis批量更新返回结果为-1,是由于mybatis的defaultExExecutorType引起的,    它有三个执行器:SIMPLE 就是普通的执行器:REUSE 执行器会重用预处理语句 ...

  7. Java高级架构师(一)第37节:反向代理和动静分离的实现

    http协议->server->location 输入http:locahost:80/ 进入百度的界面. 做负载转发测试.路径已经转发,可能一些协议已经屏蔽了,导致内容出不来. 关于负载 ...

  8. [转]SSH包全解

    Struts2 Core Libraries 必须引入的包 : struts2-core.jar——Struts2的核心包 xwork-core.jar——Command模式框架,WebWork和St ...

  9. mac下使用github 上传代码

    提起github相信大家都不会陌生,在这里就不再赘述了.作为开源代码库以及版本控制系统,使用好了确实会非常受益,再说的势利点,你找工作时给面试官说你经常维护自己的技术博客和github,相信你给他的印 ...

  10. C#之Enum中的Flag

    我们知道在默认情况下,第一个枚举数的值为0,后面每个枚举数的值一次加1. enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri}; 我们也可以用初始值来重写默认值. ...