您現在的位置是:電腦技術吧?>? 組裝維修 ??>??aspnet文件上傳,asp上傳文件??>??正文詳情

aspnet文件上傳,asp上傳文件

萬博遠2019-12-13 02:42:06 人圍觀
簡介asp上傳文件保存Asp.net依賴于。Net framework類庫封裝了很多函數,使得上傳文件變得非常簡單。有三種基本方法。您可以參考以下方法為您的朋友:使用web控件文件上asp上傳文字源碼

ASP.NET依托.net framework類庫,封裝了大量的功能,使得上傳文件非常簡單,主要有以下三種基本方法,需要的朋友可以參考下方法一:用Web控件FileUpload,上傳到網站根目錄。

Test.aspx關鍵代碼:代碼如下:form id=form1 runat=serverasp:FileUpload ID=FileUpload1 runat=server /asp:Button ID=Button1 runat=server Text=上傳 OnClick=Button1_Click /asp:Label ID=Label1 runat=server Text= Style=color: Red/asp:Label/formTest.aspx.cs關鍵代碼:代碼如下:protected void Button1_Click(object sender, EventArgs e){ if (FileUpload1.HasFile) { FileUpload1.SaveAs(Server.MapPath(~/) FileUpload1.FileName); Label1.Text = 上傳成功!; }}方法二:用Html控件HtmlInputFile,上傳到網站根目錄。

Test.aspx關鍵代碼:代碼如下:form id=form1 runat=serverinput type=file id=file1 runat=server /asp:Button ID=Button1 runat=server Text=上傳 OnClick=Button1_Click /asp:Label ID=Label1 runat=server Text= Style=color: Red/asp:Label/formTest.aspx.cs關鍵代碼:代碼如下:protected void Button1_Click(object sender, EventArgs e){ if (file1.PostedFile.ContentLength 0) { file1.PostedFile.SaveAs(Server.MapPath(~/) Path.GetFileName(file1.PostedFile.FileName)); Label1.Text = 上傳成功!; }}方法三:用Html元素input type=file /,通過Request.Files上傳到網站根目錄。

Test.aspx關鍵代碼:代碼如下:form id=form1 runat=server enctype=multipart/form-datainput type=file name=file /asp:Button ID=Button1 runat=server Text=上傳 OnClick=Button1_Click /asp:Label ID=Label1 runat=server Text= Style=color: Red/asp:Label/formTest.aspx.cs關鍵代碼:代碼如下:protected void Button1_Click(object sender, EventArgs e){ if (Request.Files[file].ContentLength 0) { Request.Files[file].SaveAs(Server.MapPath(~/) Path.GetFileName(Request.Files[file].FileName)); Label1.Text = 上傳成功!; }}注意兩個區別:一:FileUpload.FileName獲取客戶端上傳文件名(不帶路徑),而file1.PostedFile.FileName 和Request.Files[file].FileName在不同瀏覽器下情況不同:IE8下獲得的是客戶端上傳文件的完全限定名(帶路徑),谷歌、蘋果等瀏覽器下則仍為文件名(不帶路徑)。

二:FileUpload控件有HasFile屬性,用于判斷用戶是否選擇了上傳文件,而后面兩種方法則需要通過判斷上傳文件大小ContentLength屬性,當用戶沒有選擇上傳文件時,該屬性值為0。

可以看出FileUpload封裝程度更高,但靈活性也稍差。

例,Asp.net 文件上傳類(取得文件后綴名,保存文件,加入文字水印)代碼如下:using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Drawing;using System.IO;using System.Drawing.Imaging;namespace EC{/// summary/// 上傳類/// /summarypublic class UploadObj{public UploadObj(){//// TODO: 在此處添加構造函數邏輯//}/// summary/// 允許文件上傳的類型枚舉/// /summarypublic enum FileType{jpg,gif,bmp,png}#region 取得文件后綴/// summary/// 取得文件后綴/// /summary/// param name=filename文件名稱/param/// returns/returnspublic static string GetFileExtends(string filename){string ext = null;if (filename.IndexOf('.') 0){string[] fs = filename.Split('.');ext = fs[fs.Length - 1];}return ext;}#endregion#region 檢測文件是否合法/// summary/// 檢測上傳文件是否合法/// /summary/// param name=fileExtends文件后綴名/param/// returns/returnspublic static bool CheckFileExtends(string fileExtends){bool status = false;fileExtends = fileExtends.ToLower();string[] fe = Enum.GetNames(typeof(FileType));for (int i = 0; i fe.Length; i ){if (fe[i].ToLower() == fileExtends){status = true;break;}}return status;}#endregion#region 保存文件/// summary/// 保存文件/// /summary/// param name=fpath全路徑,Server.MapPath()/param/// param name=myFileUpload上傳控件/param/// returns/returnspublic static string PhotoSave(string fpath,FileUpload myFileUpload){string s = ;string fileExtends = ;string fileName = myFileUpload.FileName;if (fileName != ){//取得文件后綴fileExtends = EC.UploadObj.GetFileExtends(fileName);if (!EC.UploadObj.CheckFileExtends(fileExtends)){EC.MessageObject.ShowPre(上傳文件類型不合法);}Random rd = new Random();s = EC.RandomObject.DateRndName(rd) . fileExtends;string file = fpath s;try{myFileUpload.SaveAs(file);}catch (Exception ee){throw new Exception(ee.ToString());}}return s;}#endregion#region 加入文字水印/// summary/// 加入文字水印/// /summary/// param name=fileName文件名稱路徑(全路徑)/param/// param name=text文件/parampublic void AddTextToImg(string fileName, string text){if (!File.Exists(fileName)){throw new FileNotFoundException(文件不存在);}if (text == string.Empty){return;}System.Drawing.Image image = System.Drawing.Image.FromFile(fileName);Bitmap bitmap = new Bitmap(image, image.Width, image.Height);Graphics g = Graphics.FromImage(bitmap);float fontSize = 12.0f;//字體大小float textWidth = text.Length * fontSize;//文本的長度//下面定義一個矩形區域,以后在這個矩形里面畫上白底黑字float rectX = 0;float rectY = 0;float rectWidth = text.Length * (fontSize 8);float rectHeight = fontSize 8;//聲明矩形域RectangleF textArea = new RectangleF(rectX, rectY, rectWidth, rectHeight);Font font = new Font(宋體, fontSize);//定義字體Brush whiteBrush = new SolidBrush(Color.White);//白筆刷,畫文字用Brush blackBrush = new SolidBrush(Color.Black);//黑筆刷,畫背景用g.FillRectangle(blackBrush, rectX, rectY, rectWidth, rectHeight);g.DrawString(text, font, whiteBrush, textArea);MemoryStream ms = new MemoryStream();bitmap.Save(ms, ImageFormat.Jpeg);//輸出處理后的圖像,這里為了演示方便,我將圖片顯示在頁面中了//Response.Clear();//Response.ContentType = image/jpeg;//Response.BinaryWrite(ms.ToArray());g.Dispose();bitmap.Dispose();image.Dispose();}#endregion}}ASP.NET的弊端ASP.NET處理文件上傳的最大的問題在于內存占用太高,由于將整個文件載入內存進行處理,導致如果用戶上傳文件太大,或者同時上傳的用戶太多,會造成服務器端內存耗盡。

這個觀點其實是片面的,對于早期ASP.NET 1.X,為了供程序處理,會將用戶上傳的內容完全載入內存,這的確會帶來問題,但在ASP.NET 2.0中就已經會在用戶上傳數據超過一定數量之后將其存在硬盤中的臨時文件中,而這點對于開發人員完全透明,也就是說,開發人員可以像以前一樣進行數據流的處理,這個也在httpRuntime里通過requestLengthDiskThreshold 屬性來設置閾值(threshold),其默認值為256,即一個請求內容超過256KB時就會啟用硬盤作為緩存,這個閾值和客戶端是否是在上傳內容無關,只關心客戶端發來的請求大于這個值。

因此,在ASP.NET 2.0中服務器的內存不會因為客戶端的異常請求而耗盡。

另外一個弊端就是當請求超過maxRequestLength(默認4M)之后,ASP.NET處理程序將不會處理該請求。

這和ASP.NET拋出一個異常完全不同,這就是為什么如果用戶上傳文件太大,看到的并不是ASP.NET應用程序中指定的錯誤頁面(或者默認的),因為ASP.NET還沒有對這個請求進行處理。

還有一個問題就是處理ASP.NET大文件上傳的超時。

這個其實可以通過在運行時讀取web.config中的httpRuntime節,并轉化為 HttpRuntimeSection對象或者重寫Page.OnError()來檢測HTTP Code(相應代碼)是否為400來處理,這里不再贅述代碼如下:代碼如下: System.Configuration.Configuration config = WebConfigurationManager. OpenWebConfiguration(~); HttpRuntimeSection section = config.GetSection (system.web/httpRuntime) as HttpRuntimeSection; double maxFileSize = Math.Round (section.MaxRequestLength / 1024.0, 1); string errorString = string.Format(Make sure your file is under {0:0.#} MB., maxFileSize); protected override void OnError(EventArgs e) { HttpContext ctx = HttpContext.Current; Exception exception = ctx.Server.GetLastError (); string errorString = Offending URL: ctx.Request.Url.ToString () Source: exception.Source Message: exception.Message Stack trace: exception.StackTrace; ctx.Response.Write (errorString); ctx.Server.ClearError (); base.OnError (e); }對于文件上傳的功能需要較為特別的需求例如進度條提示,ASP.NET封裝的控件〈asp:FileUpload /〉就無能為力了。

好的解決方案Robert Bazinet建議,最好的解決方案是使用RIA,大多數情況下,建議用Silverlight或 Flash的上傳組件來替代傳統的FileUpload組件,這類組件不只是提供了更好的上傳體驗,也比〈input type=file〉標簽在頁面上的文本框、按鈕漂亮,這個〈input type=file〉標簽并不能夠通過CSS添加樣式,不過也有人嘗試去解決了。

至今為止并沒有什么商業上傳組件使用了Silverlight,不過這里有演示了用Silverlight進行多文件上傳的示例程序。

當然使用Silverlight就可以很輕松的實現多線程上傳,斷點續傳這種功能了,這些都不是我要詳細討論的內容,如果有需要可以自己去看下。

可選擇的解決方案使用〈input type=file /〉標簽所能提供的支持非常有限,一些特殊需求我們不能實現或者說是無法輕易地、直接地實現。

所以為了實現這樣的功能我們每次都要繞一個大大的彎。

為了避免每次實現相同功能時都要費神費時地走一遍彎路,市面上或者開源界出現了各種上傳組件,上傳組件提供了封裝好的功能,使得我們在實現文件上傳功能時變得輕松了很多。

例如幾乎所有的上傳組件都直接或間接地提供了進度提示的功能,有的提供了當前的百分比數值,有的則直接提供了一套UI;有的組件只提供了簡單的UI,有的卻提供了一整套上傳、刪除的管理界面。

此外,有的組件還提供了防止客戶端惡意上傳的能力。

我覺得最好的辦法是在HttpModule里分塊讀取文件并且保持頁面激活的狀態,這樣就不會超時,同時也可以跟蹤進度或者取消上傳,或者通過 HttpHandler實現,在通過進度條給用戶充分提示的同時,也讓開發人員能夠更好地控制文件大小以及上傳過程中可能出現的異常。

上傳組件都是用這些辦法的,我們的選擇有:FileUploader.NET (MediaChase公司,$310以上) RadUpload (Telerik公司,$249) NeatUpload (免費,遵守LGPL協議) NeatUpload是在ASP.NET Pipeline的BeginRequest事件中截獲當前的HttpWorkerRequest對象,然后直接調用其ReadEntityBody等方法獲取客戶端傳遞過來的數據流,并加以分析和處理。

并通過使用新的請求進行輪詢來獲取當前上傳的狀態。

關于NeatUpload和其他開源組件的介紹可以參看JeffreyZhao的在ASP.NET應用程序中上傳文件,當然他還說了Memba Velodoc XP Edition和swfupload,寫的非常棒!HttpWorkerRequest實現介紹利用隱含的HttpWorkerRequest,用它的GetPreloadedEntityBody和ReadEntityBody方法從IIS為ASP.NET建立的pipe里分塊讀取數據可以實現文件上傳。

實現方法如下:代碼如下:IServiceProvider provider=(IServiceProvider) HttpContext.Current; HttpWorkerRequest wr=(HttpWorkerRequest) provider.GetService(typeof(HttpWorkerRequest)); byte[] bs=wr.GetPreloadedEntityBody(); if(!wr.IsEntireEntityBodyIsPreloaded()) { int n=1024; byte[] bs2=new byte[n]; while(wr.ReadEntityBody(bs2,n) 〉0) { } }

版權聲明:本文由 萬博遠 整理編輯。

原標題:net上傳文件,aspmvc文件上傳

轉載注明出處:http://www.dn9ww09s.icu/assemble/15393.html

文章評論

    共有條評論來說兩句吧...

    用戶名:

    驗證碼:

作者推薦

  • asp獲取xml,xmlpost請求asp

    asp獲取xml,xmlpost請求asp 相關圖片api返回xml格式本文主要介紹了asp.net操作中XML的添加、刪除和修改的實例。以下代碼可由所需的朋友參考:使用系統;使用系統。收集;使用系統。組件模型;使用系統Js加載xml跨域...

  • 怎么獲取地址欄的參數,jsp獲取地址欄網址

    怎么獲取地址欄的參數,jsp獲取地址欄網址 相關圖片手機端獲取地址欄高度如果我們想得到地址:http://192.168.0.5/super/super_article。ASP?Id=4,那么我們只需要得到:192.168.0.5%電腦地址欄在哪...

  • 如何異常處理,異常處理是由

    如何異常處理,異常處理是由 相關圖片異常處理四步驟本文主要介紹PHP異常處理分析,重點介紹如何捕獲異常,并給出代碼操作示例。您可以參考PHP來保留兩個異常類:exception和errorexception。代js異常處理...

  • 怎樣成為成功的人,我要成為一個成功的人

    怎樣成為成功的人,我要成為一個成功的人 相關圖片如何做一個成功的人一個常見的錯誤是將JSP視為簡化的Java。實際上,JSP是一個簡化的servlet。)程序員經常嘗試直接學習jsp而不學習所需的支持技術。JSP是一種橋接技術怎樣做一個成功的...

  • asp批量文件復制,aspgridview選擇性

    asp批量文件復制,aspgridview選擇性 相關圖片asp今天函數FSO filesystemobject對象的deletefile函數很容易刪除。讓我們看看下面的例子。我們將使用函數delfile(path)dim fsorasp轉換函數...

  • asp實例,asp開發實例

    asp實例,asp開發實例 相關圖片aspnet網站開發實例本文主要介紹了asp.net輸出重寫壓縮頁面文件的示例代碼。您可以為您的朋友參考以下示例代碼:使用系統;使用系統。數據;使用系統。配置;使用系統。西asp入門到...

  • 寫代碼需要什么配置,此設備的配置不正確代碼1

    寫代碼需要什么配置,此設備的配置不正確代碼1 相關圖片編程配置本文主要介紹了PHPIDEphpstorm配置支持友好的laravel代碼提示方法,關鍵配置已經添加了紅色提示,您可以參考phpstorm工件來支持更友好的la跑代碼用什么電腦配置...

  • 數據庫如何連接asp,aspnet連接數據庫

    數據庫如何連接asp,aspnet連接數據庫 相關圖片asp連數據庫Cls數DBPrivate ConnStrPrivate DBpath,DBLink,DBi=======數據庫連接操作:==========asp與數據庫...

  • c 基本語法,c基本語法

    c  基本語法,c基本語法 相關圖片c語言的基本語法有五種類型的JSP編譯器指南和指令組件。在JSP 1.0之后,大多數JSP包含在一個標記中,以%作為開始%和%作為結束。新的JSP 1.1規范已經發布,并且它也objectc的基本語法...

  • jsp如何實現分頁,jsp怎么分頁

    jsp如何實現分頁,jsp怎么分頁 相關圖片jsp分頁代碼步驟%//變量聲明java.sql.connection sqlcon;//database connection object java.sql.statemenservlet分頁...

熱評文章

  • ASP入門,asp詳細教程

    ASP入門,asp詳細教程 相關圖片asp建站教程ASP-cookies教程是用來記錄用戶瀏覽等信息的,但cookies只能將信息保存到客戶端,而且不安全。許多簡單的投票使用cookies。在同一個ASP會話中簡單ASP網頁...

  • querystring傳值,parsequerystring

    querystring傳值,parsequerystring 相關圖片vuequerystring當您從HTML表單傳遞信息時,使用get方法從ASP頁面處理它,并且您可以使用ASP的querystring集合檢索數據。在過去,我們創建tizagform.hquerystringpost...

  • artifact在線人數,全球在線人數最多的游戲

    artifact在線人數,全球在線人數最多的游戲 相關圖片在線人數最多的網友Global.asa是一個文本文件,可以找到您的主目錄(/Global.asa)。Lou將基本結構顯示為global.as a文件。global.asa腳本語言騰訊在線人數提前...

  • 這件事使我苦惱,什么使我煩惱

    這件事使我苦惱,什么使我煩惱 相關圖片考試使我苦惱作文450PHP編程中的中文編碼問題一直困擾著許多人。這個問題的原因很簡單。每個國家(地區)都規定了計算機信息交換的字符編碼集,如美國的擴展ASCII碼、中國的GB231最...

  • asp導出excel,asp導出到excel

    asp導出excel,asp導出到excel 相關圖片asp導出exl本文主要介紹了asp.net導出excel的簡單方法實例。你可以給你的朋友參考Excel的操作。最常用的方法是導出和導入。關于密碼沒有太多的胡說八道。這個例子是aspose導出excel亂碼...

  • 循環增加json節點,識別json節點數量

    循環增加json節點,識別json節點數量 相關圖片java遍歷json我們之前已經解釋了使用JavaScript獲取JSON數據節點路徑的問題。今天我們將更進一步。我們來談談如何通過PHP獲取JSON數據的所有節點路徑?12345c# json...

  • ajax sqlserver,jquerysql注入

    ajax sqlserver,jquerysql注入 相關圖片jsp防止sql注入本文主要介紹了asp.net Ajax SQL Server的自動完成功能。對于您的朋友,請參考下面的代碼下載說明:數據庫連接字符串在web.config文件中sql有什么用...

  • asp網站代碼,簡單的webasp

    asp網站代碼,簡單的webasp 相關圖片站內短信 asp源碼!--吡含含含asp 開發...

  • php 數據庫,php對mysql進行增刪

    php 數據庫,php對mysql進行增刪 相關圖片最簡單的php查詢數據庫PDO是MySQL數據庫操作的一個公共類。我們可以直接使用PDO操作數據庫,而不必定義類。但是,在PHP默認配置中沒有啟用PDO,因此在使用它之前,必須在PHPphp關閉數據...

  • asp生成文件夾,asp文件夾瀏覽

    asp生成文件夾,asp文件夾瀏覽 相關圖片asp.netmvc文件夾%設置FSO=Server.CreateObject(Scripting.FileSystemObject)設置服務器文件夾=FSO.GetFolder(Sernet文件夾...

關注微信

变脸官网查询