c#實現檔案上傳 下載 從URL上下載

來源:互聯網
上載者:User

檔案上傳

一.   在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();

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.