ASP.NET实现网页版小优盘

今天看到了一篇不错的文章,就拿来一起分享一下吧。
实现的是文件的上传与下载功能。



关于文件上传:
谈及文件上传到网站上,首先我们想到的就是通过什么上传呢?在ASP.NET中,只需要用FileUpload控件即可完成,但是默认上传4M大小的数据,当然了你可以在web.config文件中进行修改,方式如下:

<system.web>
    <httpRuntime executionTimeout="240"
        maxRequestLength="20480"/>
</system.web>
//但是这种方式虽然可以自定义文件的大小,但并不是无极限的修改的

下一步,现在“工具”有了,要怎么上传呢?按照直觉是不是应该先选中我想要上传的文件呢?这就对了,因为从FileUpload控件返回后我们便已经得到了在客户端选中的文件的信息了,接下来就是将这个文件进行修改(具体的操作是:去掉所得路径下的盘符的信息,换成服务器上的相关路径下,不过这里并没有更改原本文件的名称)。然后调用相关的上传方法就好了。



先看一下界面文件吧

<form id="form1" runat="server">
        <asp:FileUpload ID="FileUpload1" runat="server" />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <asp:ImageButton ID="ImageButton_Up" runat="server" OnClick="ImageButton_Up_Click" style="text-decoration: underline" ToolTip="Up" Width="54px" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <asp:ImageButton ID="ImageButton_Down" runat="server" OnClick="ImageButton_Down_Click" ToolTip="Download" Width="51px" />
        <br />
        <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
&nbsp;
    </form>


然后是具体的逻辑

using System;
using System.Collections.Generic;
using System.Linq;
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)
    {

    }

    //a method for currying file updown
    private void UpFile()
    {
        String strFileName;
        //get the path of the file
        String FilePath = Server.MapPath("./") + "File";
        //judge weather has file to upload
        if (FileUpload1.PostedFile.FileName != null)
        {
            strFileName = FileUpload1.PostedFile.FileName;
            //save all the message of the file
            strFileName = strFileName.Substring(strFileName.LastIndexOf("\\") + 1);
            try
            {
                FileUpload1.SaveAs(FilePath + "\\" + this.FileUpload1.FileName);
                //save the file and obey the rules
                Label1.Text = "Upload success!";
            }
            catch (Exception e)
            {
                Label1.Text = "Upload Failed!"+e.Message.ToString();
            }
        }
    }
    protected void ImageButton_Up_Click(object sender, ImageClickEventArgs e)
    {
        UpFile();
    }
    protected void ImageButton_Down_Click(object sender, ImageClickEventArgs e)
    {
        Response.Redirect("DownFile.aspx");
    }
}


说完了上传,下面谈一谈文件的下载。这里主要是借助于Directory对象的GetFiles()方法,其可以获得指定路径下的所有的文件的名称。这样我们就可以用之来填充一个listBox,来供我们选择到底要下载那一个文件。
也许这时你会有一点疑惑了,我现在知道了有哪些文件可以下载,那下一步我要怎么来实现呢?
其实这里是利用了Session的存储机制,那就是将我们在listbox 中选择的item的内容记录到session的特定的key中,这样的话,我们就可以不用关心这些信息在页面间是怎么传输的了。只需要在想要进行下载的地方直接获取就可以了。
最为核心的是下载的过程:

if (filepathinfo.Exists)
            {
                //save the file to local
                Response.Clear();
                Response.AddHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode(filepathinfo.Name));
                Response.AddHeader("Content-length", filepathinfo.Length.ToString());
                Response.ContentType = "application/octet-stream";
                Response.Filter.Close();
                Response.WriteFile(filepathinfo.FullName);
                Response.End();
            }


下面看一下,下载界面的布局文件吧

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

<!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">
        <asp:ImageButton ID="ImageButton_Up" runat="server" Height="56px" OnClick="ImageButton_Up_Click" ToolTip="Upload" Width="90px" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <asp:ImageButton ID="ImageButton_Down" runat="server" Height="52px" OnClick="ImageButton_Down_Click" style="margin-top: 0px" ToolTip="Download" Width="107px" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <div>

        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        <br />
        <asp:ListBox ID="ListBox1" runat="server" Height="169px" OnSelectedIndexChanged="ListBox1_SelectedIndexChanged" Width="371px"></asp:ListBox>

    </div>
    </form>
</body>
</html>


然后是具体的逻辑代码实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;

public partial class DownFile : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)//the first time to load
        {
            //get all the file in File folder
            String[] AllTxt = Directory.GetFiles(Server.MapPath("File"));
            foreach (String name in AllTxt)
            {
                ListBox1.Items.Add(Path.GetFileName(name));
            }
        }
    }
    protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        //make use of sssion to save the selected file in the listbox with the key of "select"
        Session["select"] = ListBox1.SelectedValue.ToString();
    }
    protected void ImageButton_Down_Click(object sender, ImageClickEventArgs e)
    {
        //judge weather user choose at least one file
        if (ListBox1.SelectedValue != "")
        {
            //get the path of the choosed file
            String FilePath = Server.MapPath("File/") + Session["select"].ToString();
            //initial the object of Class FileInfo and make it as the package path
            FileInfo filepathinfo = new FileInfo(FilePath);
            //judge weather the file exists
            if (filepathinfo.Exists)
            {
                //save the file to local
                Response.Clear();
                Response.AddHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode(filepathinfo.Name));
                Response.AddHeader("Content-length", filepathinfo.Length.ToString());
                Response.ContentType = "application/octet-stream";
                Response.Filter.Close();
                Response.WriteFile(filepathinfo.FullName);
                Response.End();
            }
            else
            {
                Page.RegisterStartupScript("sb", "<script>alert('Please choose one file,sir!')</script>");
            }
        }
    }
    protected void ImageButton_Up_Click(object sender, ImageClickEventArgs e)
    {
        Response.Redirect("Default.aspx");
    }
}


注意:
最终的上传的文件将会在根目录下的File文件夹下看到,下载的时候也是从这个文件夹下进行下载的。



总结:
经过这个小项目的实践,我看到了session给编程带来的便利,也体会到了FileUpload控件的威力;然而这并不是全部,这里仅仅是冰山一角而已。希望能和广大博友一起进步一起提高!

时间: 2024-12-31 16:52:59

ASP.NET实现网页版小优盘的相关文章

基于javascript实现句子翻牌网页版小游戏_javascript技巧

本文实例为大家分享了js实现句子翻牌网页版小游戏,供大家参考,具体内容如下 效果图: 实现思路: 考察打字能力和记忆能力的益智小游戏. 1.会先把一段文字显示 2.一小段时间后显示背面 3.输入框输入文字与文字全部对应显示正面 具体代码: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>

基于javascript实现泡泡大冒险网页版小游戏_javascript技巧

本文实例为大家分享了一个很有趣的网页版游戏,有点类似金山打字游戏的青蛙过河,供大家参考,具体内容如下 效果图: 实现思路: 益智类小游戏,主要练习打字能力,基于jq开发. 1.在输入框输入泡泡对应文字,点击enter提交 2.与泡泡文字相对提示分数 3.可以暂停操作 4.每次泡泡着地会减少血量,减少到0结束游戏 5.每过一段时间会加快泡泡下落速度 具体代码: <html> <head> <meta http-equiv="Content-Type" con

拥有网页版小U盘 ASP.NET实现文件上传与下载功能_实用技巧

今天看到了一篇不错的文章,就拿来一起分享一下吧. 实现的是文件的上传与下载功能. 关于文件上传: 谈及文件上传到网站上,首先我们想到的就是通过什么上传呢?在ASP.NET中,只需要用FileUpload控件即可完成,但是默认上传4M大小的数据,当然了你可以在web.config文件中进行修改,方式如下: <system.web> <httpRuntime executionTimeout="240" maxRequestLength="20480"

刷网页卡到想吐?谷歌要用网页版“小程序”来拯救你

多年来,Google一直致力于复兴手机上的网页,现在看来似乎已经有所成效了. 以往,当你点击Facebook中的新闻故事链接,或者打开浏览器查看电影放映时间时,很可能会中途放弃.因为即使你使用的是高端手机,且网络环境良好,也会觉得操作麻烦且慢到难以忍受. 为了改变这一局面,Google在I/O开发者大会上推出了一个叫做渐进式网络应用程序(或简称PWAs)的编程动作.通过PWAs,用户浏览网页时可以感受到近乎本地应用般良好的用户体验.网页加载更快,而且即使在没有网络连接的情况下也能工作,还能在接收

asp-ASP.NET:网页版在线聊天系统开发思路

问题描述 ASP.NET:网页版在线聊天系统开发思路 想请教下,有人开发过在在线聊天系统吗?给点思路. 如果客户端主动获取信息,比如每1s抓取下数据库,有信息则在客户端显示出来. 这样如果同时有1000人在线,是不是太占资源了呀? 网页版的能否做一个被动式相应的程序呢? 比如A发送消息给B,A页面才会刷新获取页面呢? 解决方案 http://download.csdn.net/detail/toryshao/2697724http://download.csdn.net/detail/wangz

jQuery网页版打砖块小游戏源码分享_jquery

这是一款基于jQuery实现网页版打砖块小游戏源码,满满的童年回忆. 为大家分享的jQuery实现网页版打砖块小游戏源码如下 效果演示 源码下载 <!DOCTYPE html> <html lang="en" > <head> <meta charset="gb2312" /> <title>jQuery网页版打砖块小游戏源码</title> <link href="css/ma

小技巧:基于ASP.NET的网页复用方法

asp.net|技巧|网页 0. 引言 随着网络的不断发展,以Web为基础的B/S架构是当前应用程序的主流,在这种架构下业务逻辑和数据库都放在服务器段,用户通过浏览器来操作服务器端的数据.在Microsoft.NET平台还没有推出之前,人们可以通过ASP方式实现上述目标,现在则可以选择ASP.NET了. ASP.NET 是一个已编译的.基于.NET的环境,可以用任何与.NET兼容的语言(包括 Visual Basic.NET.C#和JScript.NET.)创作应用程序.任何ASP.NET 应用

javascript html实现网页版日历代码_javascript技巧

本文实例为大家分享了网页版日历代码,供大家参考,具体内容如下 效果图: 实现代码: <html> <head> <link rel="stylesheet" type="text/css" href="Skin.css"> <style> <!-- table{ text-align: center } --> </style> </head> <body&

人生日历网页版怎么用?

  人生日历网页版怎么用?小编带来人生日历网页版使用方法,人生日历也有web版咯~具体功能有哪些呢?有兴趣的朋友可以来了解一下. 细心的童鞋们一定发现了人生日历这一贴心功能的出现.在人生日历官网主页右上角的醒目位置,很轻松的就能找到"网页版"日历.下面小编带大家来体验一下. 人生日历的web版分为两个主要部分,第一部分是主日历部分.在主日历上,童鞋们可以查看日历,阳历和农历对应显示,清晰明了.点击主日历上方的下拉按钮,可查看一年的法定节假日放假调休的安排,让自己随时都能根据安排来计划自