自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ASP.NET中的文件上傳下載方法集合

開發(fā) 后端
本文總結(jié)了在ASP.NET中一些文件上傳下載的方法。ASP.NET中的文件上傳下載是我們經(jīng)常要用到的技術(shù)。

文件的上傳下載是我們在實際項目開發(fā)過程中經(jīng)常需要用到的技術(shù),這里給出幾種常見的方法,本文主要內(nèi)容包括:

1、如何解決文件上傳大小的限制

2、以文件形式保存到服務(wù)器

3、轉(zhuǎn)換成二進制字節(jié)流保存到數(shù)據(jù)庫以及下載方法

4、上傳Internet上的資源

ASP.NET中文件上傳下載,***部分:

首先我們來說一下如何解決asp.net中的文件上傳大小限制的問題,我們知道在默認(rèn)情況下asp.net的文件上傳大小限制為2M,一般情況下,我們可以采用更改Web.Config文件來自定義***文件大小,如下:

這樣上傳文件的***值就變成了4M,但這樣并不能讓我們無限的擴大 MaxRequestLength的值,因為asp.net會將全部文件載入內(nèi)存后,再加以處理。解決的方法是利用隱含的 HttpWorkerRequest,用它的GetPreloadedEntityBody和ReadEntityBody方法從IIS為asp.net 建立的pipe里分塊讀取數(shù)據(jù)。實現(xiàn)方法如下:

  1. IServiceProvidERProvider=(IServiceProvider)HttpContext.Current;   
  2. HttpWorkerRequestwr=(HttpWorkerRequest)provider.GetService(typeof(HttpWorkerRequest));   
  3. byte[]bs=wr.GetPreloadedEntityBody();   
  4. .   
  5. if(!wr.IsEntireEntityBodyIsPreloaded())   
  6. {   
  7.  intn=1024;   
  8.  byte[]bs2=newbyte[n];   
  9.  while(wr.ReadEntityBody(bs2,n)>0)   
  10.  {   
  11.   ..   
  12.  }   
  13. }  
  14.  

這樣就可以解決了大文件的上傳問題了。

ASP.NET中文件上傳下載,第二部分:

下面我們來介紹如何以文件形式將客戶端的一個文件上傳到服務(wù)器并返回上傳文件的一些基本信息。

首先我們定義一個類,用來存儲上傳的文件的信息(返回時需要)。

  1. public class FileUpLoad   
  2. {   
  3.  public FileUpLoad()   
  4.  {}   
  5.  /**////   
  6.  /// 上傳文件名稱   
  7.  ///   
  8.  public string FileName   
  9.  {   
  10.   get   
  11.   {   
  12.    return fileName;   
  13.   }   
  14.   set   
  15.   {   
  16.    fileName = value;   
  17.   }   
  18.  }   
  19.  private string fileName;   
  20.  /**////   
  21.  /// 上傳文件路徑   
  22.  ///   
  23.  public string FilePath   
  24.  {   
  25.   get   
  26.   {   
  27.    return filepath;   
  28.   }   
  29.   set   
  30.   {   
  31.    filepath = value;   
  32.   }   
  33.  }   
  34.  private string filepath;   
  35.  /**////   
  36.  /// 文件擴展名   
  37.  ///   
  38.  public string FileExtension   
  39.  {   
  40.   get   
  41.   {   
  42.    return fileExtension;   
  43.   }   
  44.   set   
  45.   {   
  46.    fileExtension = value;   
  47.   }   
  48.  }   
  49.  private string fileExtension;   
  50. }  
  51.  

另外我們還可以在配置文件中限制上傳文件的格式(App.Config):

  1. <?XML version="1.0" encoding="gb2312" ?>   
  2. <Application>   
  3. <FileUpLoad>  
  4. <Format>.jpg|.gif|.png|.bmp   
  5. </FileUpLoad>   
  6. </Application> 

這樣我們就可以開始寫我們的上傳文件的方法了,如下:

  1. public FileUpLoad UpLoadFile(HtmlInputFile InputFile,string filePath,string myfileName,bool isRandom)   
  2. {   
  3.  FileUpLoad fp = new FileUpLoad();   
  4.  string fileName,fileExtension;   
  5.  string saveName;   
  6.  //   
  7.  //建立上傳對象   
  8.  //   
  9.  HttpPostedFile postedFile = InputFile.PostedFile;   
  10.  fileName = System.IO.Path.GetFileName(postedFile.FileName);   
  11.  fileExtension = System.IO.Path.GetExtension(fileName);   
  12.  //   
  13.  //根據(jù)類型確定文件格式   
  14.  //   
  15.  AppConfig app = new AppConfig();   
  16.  string format = app.GetPath("FileUpLoad/Format");   
  17.  //   
  18.  //如果格式都不符合則返回   
  19.  //   
  20.  if(format.IndexOf(fileExtension)==-1)   
  21.  {   
  22.   throw new ApplicationException("上傳數(shù)據(jù)格式不合法");   
  23.  }   
  24.  //   
  25.  //根據(jù)日期和隨機數(shù)生成隨機的文件名   
  26.  //   
  27.  if(myfileName != string.Empty)   
  28.  {   
  29.   fileName = myfileName;   
  30.  }   
  31.  if(isRandom)   
  32.  {   
  33.   Random objRand = new Random();   
  34.   System.DateTime date = DateTime.Now;   
  35.   //生成隨機文件名   
  36.   saveName = date.Year.ToString() + date.Month.ToString() + date.Day.ToString() + date.Hour.ToString() + date.Minute.ToString() + date.Second.ToString() + Convert.ToString(objRand.Next(99)*97 + 100);   
  37.   fileName = saveName + fileExtension;   
  38.  }   
  39.  string phyPath = HttpContext.Current.Request.MapPath(filePath);   
  40.  //判斷路徑是否存在,若不存在則創(chuàng)建路徑   
  41.  DirectoryInfo upDir = new DirectoryInfo(phyPath);   
  42.  if(!upDir.Exists)   
  43.  {   
  44.   upDir.Create();   
  45.  }   
  46.  //   
  47.  //保存文件   
  48.  //   
  49.  try   
  50.  {   
  51.   postedFile.SaveAs(phyPath + fileName);   
  52.   fp.FilePath = filePath + fileName;   
  53.   fp.FileExtension = fileExtension;   
  54.   fp.FileName = fileName;   
  55.  }   
  56.  catch   
  57.  {   
  58.   throw new ApplicationException("上傳失敗!");   
  59.  }   
  60.  //返回上傳文件的信息   
  61.  return fp;   
  62. }  
  63.  

然后我們在上傳文件的時候就可以調(diào)用這個方法了,將返回的文件信息保存到數(shù)據(jù)庫中,至于下載,就直接打開那個路徑就OK了。

ASP.NET中文件上傳下載,第三部分:

這里我們主要說一下如何以二進制的形式上傳文件以及下載。首先說上傳,方法如下:

  1. public byte[] UpLoadFile(HtmlInputFile f_IFile)   
  2. {   
  3.  //獲取由客戶端指定的上傳文件的訪問   
  4.  HttpPostedFile upFile=f_IFile.PostedFile;   
  5.  //得到上傳文件的長度   
  6.  int upFileLength=upFile.ContentLength;   
  7.  //得到上傳文件的客戶端MIME類型   
  8.  string contentType = upFile.ContentType;   
  9.  byte[] FileArray=new Byte[upFileLength];  
  10.  
  11.  Stream fileStream=upFile.InputStream;  
  12.  
  13.  fileStream.Read(FileArray,0,upFileLength);   
  14.  return FileArray;   
  15. }  
  16.  

這個方法返回的就是上傳的文件的二進制字節(jié)流,這樣我們就可以將它保存到數(shù)據(jù)庫了。下面說一下這種形式的下載,也許你會想到這種方式的下載就是新建一個 aspx頁面,然后在它的Page_Load()事件里取出二進制字節(jié)流,然后再讀出來就可以了,其實這種方法是不可取的,在實際的運用中也許會出現(xiàn)無法打開某站點的錯誤,我一般采用下面的方法:

首先,在Web.config中加入:

  1. <add verb="*" path="openfile.aspx" type="RuixinOA.Web.BaseClass.OpenFile, RuixinOA.Web"/>  
  2.  

這表示我打開openfile.aspx這個頁面時,系統(tǒng)就會自動轉(zhuǎn)到執(zhí)行RuixinOA.Web.BaseClass.OpenFile 這個類里的方法,具體實現(xiàn)如下:

  1. using System;   
  2. using System.Data;   
  3. using System.Web;   
  4. using System.IO;   
  5. using Ruixin.WorkFlowDB;   
  6. using RXSuite.Base;   
  7. using RXSuite.Component;   
  8. using RuixinOA.BusinessFacade;   
  9. namespace RuixinOA.Web.BaseClass   
  10. {   
  11.  /**////   
  12.  /// NetUFile 的摘要說明。   
  13.  ///   
  14.  public class OpenFile : IHttpHandler   
  15.  {   
  16.   public void ProcessRequest(HttpContext context)   
  17.   {   
  18.    //從數(shù)據(jù)庫中取出要下載的文件信息   
  19.    RuixinOA.BusinessFacade.RX_OA_FileManager os = new RX_OA_FileManager();   
  20.    EntityData data = os.GetFileDetail(id);   
  21.    if(data != null && data.Tables["RX_OA_File"].Rows.Count >0)   
  22.    {   
  23.     DataRow dr = (DataRow)data.Tables["RX_OA_File"].Rows[0];   
  24.     context.Response.Buffer = true;   
  25.     context.Response.Clear();   
  26.     context.Response.ContentType = dr["CContentType"].ToString();   
  27.     context.Response.AddHeader("Content-Disposition","attachment;filename=" + HttpUtility.UrlEncode(dr["CTitle"].ToString()));   
  28.     context.Response.BinaryWrite((Byte[])dr["CContent"]);   
  29.     context.Response.Flush();   
  30.     context.Response.End();   
  31.    }   
  32.   }   
  33.   public bool IsReusable   
  34.   {     
  35.    get { return true;}   
  36.   }   
  37.  }   
  38. }  
  39.  

執(zhí)行上面的方法后,系統(tǒng)會提示用戶選擇直接打開還是下載。這一部分我們就說到這里。

ASP.NET中文件上傳下載,第四部分:

這一部分主要說如何上傳一個Internet上的資源到服務(wù)器。

首先需要引用 System.Net 這個命名空間,然后操作如下:

  1. HttpWebRequest hwq = (HttpWebRequest)WebRequest.Create("http://localhost/pwtest/webform1.aspx");   
  2. HttpWebResponse hwr = (HttpWebResponse)hwq.GetResponse();   
  3. byte[] bytes = new byte[hwr.ContentLength];   
  4. Stream stream = hwr.GetResponseStream();   
  5. stream.Read(bytes,0,Convert.ToInt32(hwr.ContentLength));   
  6. //HttpContext.Current.Response.BinaryWrite(bytes);  
  7.  

HttpWebRequest 可以從Internet上讀取文件,因此可以很好的解決這個問題。

【編輯推薦】

  1. ASP.NET表單身份驗證的實現(xiàn)方法
  2. JQuery Form Ajax提交asp.net表單時失敗
  3. ASP.NET安裝部署問題總結(jié)
  4. 在APACHE上運行ASP.NET經(jīng)驗總結(jié)
  5. ASP.NET在線學(xué)習(xí)資源總匯

     

責(zé)任編輯:book05 來源: cnblogs
相關(guān)推薦

2023-09-06 08:33:30

2009-07-03 14:15:54

JSP SmartUp

2009-10-30 14:03:59

ASP.NET上傳文件

2009-07-20 16:09:39

2024-05-20 13:06:18

2009-07-07 13:45:04

jspsmart

2018-04-20 16:15:42

Koa2上傳下載

2015-02-11 16:34:49

微信SDK

2009-07-21 15:38:31

2009-07-29 10:02:49

ASP.NET上傳

2009-07-21 16:23:57

2010-03-08 11:34:45

Linux上傳下載指令

2009-07-24 15:07:56

ASP.NET上傳文件

2009-07-21 13:01:07

ASP.NET上傳文件

2009-07-27 17:32:39

Web ServiceASP.NET

2011-06-08 11:36:16

ASP.NETrender

2010-02-05 08:32:32

ASP.NET MVC

2009-07-20 18:06:26

ASP.NET限制上傳

2009-07-31 11:45:42

ASP.NET文件下載

2009-07-28 13:26:34

Render方法ASP.NET
點贊
收藏

51CTO技術(shù)棧公眾號