首頁 > 軟體

ASP.NET實現檔案上傳

2022-07-26 14:01:22

本文範例為大家分享了ASP.NET實現檔案上傳的具體程式碼,供大家參考,具體內容如下

.NET中C/S和B/S上傳檔案不同

B/S中檔案上傳和C/S中的檔案上傳性質完全不一樣

在C/S中檔案上傳基本上的原理是:將使用者端計算機上的目標檔案通過Socket網路將檔案傳送至目標伺服器端計算機,然後將接受到的資料轉換為原始檔案

檔案–轉成位元組流–傳送到伺服器–將位元組流轉成檔案–儲存

而B/S中檔案上傳指的是在使用者端瀏覽器上,將目標檔案選擇好之後,通過網路將檔案傳送至目標伺服器計算機,然後將接收到的檔案儲存在伺服器計算機上。

B/S上傳檔案

頁面:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="UpLoadFileDemo.WebForm1" %>
<!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="fileup" runat="server" />
            <asp:Button ID="btnUpload" runat="server" Text="開始上傳" OnClick="btnUpload_Click" />
            <asp:Literal ID="lblMsg" runat="server"></asp:Literal>
        </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.Configuration;
namespace UpLoadFileDemo
{
   public partial class WebForm1 : System.Web.UI.Page
   {
       protected void Page_Load(object sender, EventArgs e)
       {

       }

       protected void btnUpload_Click(object sender, EventArgs e)
       {
           //【1】判斷檔案是否存在
           if (fileup.HasFile)
           {
               //【2】獲取檔案的大小,判斷是否符合設定要求
               double fileLength = fileup.FileContent.Length / (1024.0*1024.0);
               //獲取組態檔中對上傳檔案大小的限制
               double limeitLength = Convert.ToDouble(ConfigurationManager.AppSettings["fileMaxLength"])/1024.0;
               if (fileLength>limeitLength)
               {
                   lblMsg.Text = $"上傳檔案不能超過{limeitLength}MB";
                   return;
               }
               // 【3】獲取檔名,判斷副檔名是否符合要求
               string fileName = fileup.FileName;
               //判斷檔案是否exe檔案
               if (fileName.Substring(fileName.LastIndexOf(".")).ToLower()==".exe")
               {
                   lblMsg.Text = "不能上傳應用程式";
                   return;
               }
               //【4】修改檔名稱
               //一般情況下,上傳的檔案伺服器中儲存時不會採取原檔名,因為使用者端使用者很龐大,要保證每個使用者端上傳檔案不能被覆蓋
               fileName = DateTime.Now.ToString("yyyyMMddhhmmssms")+"_"+fileName; //年月日時分秒毫秒_原檔名 防止檔案絕對覆蓋
               //【5】獲取伺服器中儲存檔案的路徑
               //"~"代表應用程式的根目錄,從伺服器的根目錄找  
               //"~" Shift鍵+左上角的"`"鍵
               string path = Server.MapPath("~/UpFile");
               //【6】上傳檔案
               try
               {
                   fileup.SaveAs(path+"/"+fileName);//引數:要上傳到的檔案完整路徑,路徑+"/"+檔名
                   lblMsg.Text = "檔案上傳成功";
               }
               catch (Exception ex)
               {
                   lblMsg.Text = $"檔案上傳失敗{ex.Message}";
               }

           }
       }
   }
}

組態檔:

<?xml version="1.0" encoding="utf-8"?>
<!--
  有關如何設定 ASP.NET 應用程式的詳細資訊,請存取
  https://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
  <appSettings>
    <!--設定上傳檔案最大的位元組數:kb單位--><!--30MB-->
    <add key="fileMaxLength" value="30720"/>
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.6.1"/>
    <!--httpRuntime中可以設定請求的最大位元組數maxRequestLength-->
    <httpRuntime targetFramework="4.6.1" maxRequestLength="40960"/>
  </system.web>
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701"/>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=&quot;Web&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>
</configuration>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com