溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

ASP.NET如何實(shí)現(xiàn)文件上傳與下載功能

發(fā)布時(shí)間:2021-08-27 10:56:47 來(lái)源:億速云 閱讀:146 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)ASP.NET如何實(shí)現(xiàn)文件上傳與下載功能的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

關(guān)于文件上傳:
談及文件上傳到網(wǎng)站上,首先我們想到的就是通過(guò)什么上傳呢?在ASP.NET中,只需要用FileUpload控件即可完成,但是默認(rèn)上傳4M大小的數(shù)據(jù),當(dāng)然了你可以在web.config文件中進(jìn)行修改,方式如下:

<system.web>
  <httpRuntime executionTimeout="240"
    maxRequestLength="20480"/>
</system.web>

但是這種方式雖然可以自定義文件的大小,但并不是無(wú)極限的修改的

下一步,現(xiàn)在“工具”有了,要怎么上傳呢?按照直覺(jué)是不是應(yīng)該先選中我想要上傳的文件呢?這就對(duì)了,因?yàn)閺腇ileUpload控件返回后我們便已經(jīng)得到了在客戶(hù)端選中的文件的信息了,接下來(lái)就是將這個(gè)文件進(jìn)行修改(具體的操作是:去掉所得路徑下的盤(pán)符的信息,換成服務(wù)器上的相關(guān)路徑下,不過(guò)這里并沒(méi)有更改原本文件的名稱(chēng))。然后調(diào)用相關(guān)的上傳方法就好了。

先看一下界面文件吧

<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"  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");
  }
}

說(shuō)完了上傳,下面談一談文件的下載。這里主要是借助于Directory對(duì)象的GetFiles()方法,其可以獲得指定路徑下的所有的文件的名稱(chēng)。這樣我們就可以用之來(lái)填充一個(gè)listBox,來(lái)供我們選擇到底要下載那一個(gè)文件。
也許這時(shí)你會(huì)有一點(diǎn)疑惑了,我現(xiàn)在知道了有哪些文件可以下載,那下一步我要怎么來(lái)實(shí)現(xiàn)呢?
其實(shí)這里是利用了Session的存儲(chǔ)機(jī)制,那就是將我們?cè)趌istbox 中選擇的item的內(nèi)容記錄到session的特定的key中,這樣的話(huà),我們就可以不用關(guān)心這些信息在頁(yè)面間是怎么傳輸?shù)牧?。只需要在想要進(jìn)行下載的地方直接獲取就可以了。
最為核心的是下載的過(guò)程:

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"  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>

 然后是具體的邏輯代碼實(shí)現(xiàn)

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");
  }
}

注意:
最終的上傳的文件將會(huì)在根目錄下的File文件夾下看到,下載的時(shí)候也是從這個(gè)文件夾下進(jìn)行下載的。

感謝各位的閱讀!關(guān)于“ASP.NET如何實(shí)現(xiàn)文件上傳與下載功能”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI