程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#文件上傳的實現代碼

C#文件上傳的實現代碼

編輯:關於C#
 

文件上傳

一. 在Form中一定要將encType設為"multipart/form-data":
<form id="WebForm3" method="post" encType="multipart/form-data" runat="server" >

二. 判斷是否有文件上傳了:
當用戶沒有選擇任何要上傳的文件,即HtmlInputFile控件中的文本框為空時點擊了上傳按鈕後,在服務端得到的File1.PostedFile對象不是null,而是有對象的,所以不能用(File1.PostedFile == null)來判斷是否上傳了文件,用(File1.PostedFile.ContentLength != 0)來判斷比較好

三. 判斷上傳文件MIMIE類型:
文件上傳後可以用File1.PostedFile.ContentType來讀取這個文件的MIMIE類型,這個MIMIE類型是系統通過上傳文件的後綴名來獲得的。

四. 保存上傳的文件:

1. 文件可以通過File1.PostedFile.SaveAs(path) //path是服務器上的物理路徑,來保存文件。

if(File1.PostedFile.ContentLength != 0)

{

StringBuilder myStr = new StringBuilder();

myStr.Append("文件名稱:" + File1.PostedFile.FileName);

myStr.Append("<br>");

myStr.Append("文件類型:" + File1.PostedFile.ContentType);

myStr.Append("<br>");

myStr.Append("文件長度:" + File1.PostedFile.ContentLength.ToString());

myStr.Append("<br>");

 

string path = Server.MapPath("./"); //當前路徑

string fileName = File1.PostedFile.FileName.Substring(File1.PostedFile.FileName.LastIndexOf('//')+1);

path += fileName;

if(File.Exists(path) == true)

{

Label1.Text = "服務器上已經有了你正在上傳的文件:" + fileName;

return;

}

File1.PostedFile.SaveAs(path);

 

myStr.Append("保存完畢!");

myStr.Append("<br>");

Label1.Text = myStr.ToString();

}

else

{

Label1.Text = "你沒有選擇要上載的文件或者上傳的文件長度為0!";

}


2. 文件也可以通過二進制的讀取後存放到數據庫的二進制的字段中:
byte[] fileCont = new byte[File1.PostedFile.ContentLength];
File1.PostedFile.InputStream.Read(fileCont,0, File1.PostedFile.ContentLength);
然後將此字節數組fileCont賦給數據庫的二進制字段的參數,寫到數據庫中。

 

文件下載

一. 服務端通過Response輸出相應的HTTP Response Headers信息,和要下載的文件的數據來把文件發送到客戶端,HTTP Response Headers表現在html文件中是下面的形式:
<meta http-equiv="Content-Type" content="text/htm ">
http-equiv表示是Headers的名稱,content表示這個Headers的值

二. 首先,要輸出文件的MIME類型:
Page.Response.AddHeader( "Content-Type", “MIME類型” );

三. 其次,要輸出下載的文件的打開位置和文件名:
Page.Response.AddHeader("Content-Disposition", "attachment;filename=" + FileName );
content-disposition 的 HTTP response header 允許指定文檔表示的信息。使用這種 header ,你就可以將文檔指定成單獨打開(而不是在浏覽器中打開),還可以根據用戶的操作來顯示。如果用戶要保存文檔,你還可以為該文檔建議一個文件名。這個建議名稱會出現在 Save As 對話框的“文件名”欄中。
打開位置:
attachment ―― 表示作為附件發送到客戶端,客戶端將單獨打開此文件。
inline ―― 表示將在浏覽器中打開這個文件。
文件名:
filename ―― 表示發送到客戶端文件的文件名。

四. 准備發送到客戶端的文件數據:

1. 先將不同類型來源的數據轉成byte類型的數組,再通過Response.BinaryWrite方法發送到客戶端:

1.1. 讀取文件來獲得byte數組: string FileName; //生成或獲取要發送到客戶端的文件名

string filePath = Server.MapPath("./") + FileName; //假設文件在當前目錄下

if(File.Exists(filePath) == false)

{

//服務器上沒有這個文件

return;

}

FileStream myFile = File.OpenRead(filePath); //讀取文件進入FileStream

byte[] fileCont = new byte[myFile.Length];

myFile.Read(fileCont,0,(int)myFile.Length); //將文件流中的內容轉成byte數組


1.2. 在數據庫的二進制字段中讀取: //從url獲取圖片的id

string ImageId = Request.QueryString["img"];

//構建查詢語句

string sqlText = "SELECT img_data, img_contenttype FROM Image WHERE img_pk = " + ImageId;

SqlConnection connection = new SqlConnection( ConfigurationSettings.AppSettings["DSN"].ToString() );

SqlCommand command = new SqlCommand( sqlText, connection);

connection.Open();

SqlDataReader dr = command.ExecuteReader();

if ( dr.Read())

{

byte[] fileCont = (byte[]) dr["img_data"] ;

}

connection.Close();


1.3. 從internet上讀取文件: HttpWebRequest myWebRequest = (HttpWebRequest)WebRequest.Create( "http://www.via.com/aa.xls ");

HttpWebResponse myWebResponse = (HttpWebResponse)myWebRequest.GetResponse();

Stream readStream = myWebResponse.GetResponseStream();

 

byte[] bytes = new byte[readStream.Length];

bytes = readStream.Read(bytes,0,readStream.Length);


通過上述三種方法獲得的文件內容的byte數組就可以用來輸出了:
Page.Response.BinaryWrite(fileCont);

Page.Response.End();

 

2. 直接讀取文件輸出: string FileName; //生成或獲取要發送到客戶端的文件名

string filePath = Server.MapPath("./") + FileName; //假設文件在當前目錄下

if(File.Exists(filePath) == false)

{

//服務器上沒有這個文件

return;

}

Page.Response.Clear();

Page.Response.AddHeader( "Content-Type", "image/gif" ); //根據MIME的不同設置

Page.Response.AddHeader("Content-Disposition", "inline;filename=" + filePath);

Page.Response.WriteFile(filePath);

Page.Response.End();

 

內容結束//

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved