文件上传下载小结一(转载)
生活随笔
收集整理的這篇文章主要介紹了
文件上传下载小结一(转载)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一.?? 在Form中一定要將encType設(shè)為"multipart/form-data":
<form id="WebForm3" method="post" encType="multipart/form-data" runat="server" >
二.?? 判斷是否有文件上傳了:
當(dāng)用戶沒有選擇任何要上傳的文件,即HtmlInputFile控件中的文本框為空時點擊了上傳按鈕后,在服務(wù)端得到的File1.PostedFile對象不是null,而是有對象的,所以不能用(File1.PostedFile == null)來判斷是否上傳了文件,用(File1.PostedFile.ContentLength != 0)來判斷比較好
三.?? 判斷上傳文件MIMIE類型:
文件上傳后可以用File1.PostedFile.ContentType來讀取這個文件的MIMIE類型,這個MIMIE類型是系統(tǒng)通過上傳文件的后綴名來獲得的。
四.?? 保存上傳的文件:
1.??? 文件可以通過File1.PostedFile.SaveAs(path) //path是服務(wù)器上的物理路徑,來保存文件。
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("./");?//當(dāng)前路徑
??? string fileName = File1.PostedFile.FileName.Substring(File1.PostedFile.FileName.LastIndexOf('\\')+1);
??? path += fileName;
??? if(File.Exists(path) == true)
??? {
???????Label1.Text = "服務(wù)器上已經(jīng)有了你正在上傳的文件:" + fileName;
???????return;
??? }
??? File1.PostedFile.SaveAs(path);
??? myStr.Append("保存完畢!");
??? myStr.Append("<br>");
??? Label1.Text = myStr.ToString();
}
else
{
??? Label1.Text = "你沒有選擇要上載的文件或者上傳的文件長度為0!";
}
2.??? 文件也可以通過二進制的讀取后存放到數(shù)據(jù)庫的二進制的字段中:
byte[] fileCont = new byte[File1.PostedFile.ContentLength];
File1.PostedFile.InputStream.Read(fileCont,0, File1.PostedFile.ContentLength);
然后將此字節(jié)數(shù)組fileCont賦給數(shù)據(jù)庫的二進制字段的參數(shù),寫到數(shù)據(jù)庫中。
文件下載(轉(zhuǎn)載)
一.?? 服務(wù)端通過Response輸出相應(yīng)的HTTP Response Headers信息,和要下載的文件的數(shù)據(jù)來把文件發(fā)送到客戶端,HTTP Response Headers表現(xiàn)在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 ,你就可以將文檔指定成單獨打開(而不是在瀏覽器中打開),還可以根據(jù)用戶的操作來顯示。如果用戶要保存文檔,你還可以為該文檔建議一個文件名。這個建議名稱會出現(xiàn)在 Save As 對話框的“文件名”欄中。
打開位置:
attachment ―― 表示作為附件發(fā)送到客戶端,客戶端將單獨打開此文件。
inline ―― 表示將在瀏覽器中打開這個文件。
文件名:
filename ―― 表示發(fā)送到客戶端文件的文件名。
四.?? 準(zhǔn)備發(fā)送到客戶端的文件數(shù)據(jù):
1.??? 先將不同類型來源的數(shù)據(jù)轉(zhuǎn)成byte類型的數(shù)組,再通過Response.BinaryWrite方法發(fā)送到客戶端:
1.1.???讀取文件來獲得byte數(shù)組: string FileName;?//生成或獲取要發(fā)送到客戶端的文件名
string filePath = Server.MapPath("./") + FileName;?//假設(shè)文件在當(dāng)前目錄下
if(File.Exists(filePath) == false)
{
??? //服務(wù)器上沒有這個文件
??? return;
}
FileStream myFile = File.OpenRead(filePath);?//讀取文件進入FileStream
byte[] fileCont = new byte[myFile.Length];
myFile.Read(fileCont,0,(int)myFile.Length);? //將文件流中的內(nèi)容轉(zhuǎn)成byte數(shù)組
1.2.???在數(shù)據(jù)庫的二進制字段中讀取: //從url獲取圖片的id
string ImageId = Request.QueryString["img"];
//構(gòu)建查詢語句
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);
通過上述三種方法獲得的文件內(nèi)容的byte數(shù)組就可以用來輸出了:
Page.Response.BinaryWrite(fileCont);
Page.Response.End();
2.??? 直接讀取文件輸出: string FileName;?//生成或獲取要發(fā)送到客戶端的文件名
string filePath = Server.MapPath("./") + FileName;?//假設(shè)文件在當(dāng)前目錄下
if(File.Exists(filePath) == false)
{
??? //服務(wù)器上沒有這個文件
??? return;
}
Page.Response.Clear();
Page.Response.AddHeader( "Content-Type", "image/gif" );?//根據(jù)MIME的不同設(shè)置
Page.Response.AddHeader("Content-Disposition", "inline;filename=" + filePath);
Page.Response.WriteFile(filePath);
Page.Response.End();
內(nèi)容結(jié)束//
<form id="WebForm3" method="post" encType="multipart/form-data" runat="server" >
二.?? 判斷是否有文件上傳了:
當(dāng)用戶沒有選擇任何要上傳的文件,即HtmlInputFile控件中的文本框為空時點擊了上傳按鈕后,在服務(wù)端得到的File1.PostedFile對象不是null,而是有對象的,所以不能用(File1.PostedFile == null)來判斷是否上傳了文件,用(File1.PostedFile.ContentLength != 0)來判斷比較好
三.?? 判斷上傳文件MIMIE類型:
文件上傳后可以用File1.PostedFile.ContentType來讀取這個文件的MIMIE類型,這個MIMIE類型是系統(tǒng)通過上傳文件的后綴名來獲得的。
四.?? 保存上傳的文件:
1.??? 文件可以通過File1.PostedFile.SaveAs(path) //path是服務(wù)器上的物理路徑,來保存文件。
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("./");?//當(dāng)前路徑
??? string fileName = File1.PostedFile.FileName.Substring(File1.PostedFile.FileName.LastIndexOf('\\')+1);
??? path += fileName;
??? if(File.Exists(path) == true)
??? {
???????Label1.Text = "服務(wù)器上已經(jīng)有了你正在上傳的文件:" + fileName;
???????return;
??? }
??? File1.PostedFile.SaveAs(path);
??? myStr.Append("保存完畢!");
??? myStr.Append("<br>");
??? Label1.Text = myStr.ToString();
}
else
{
??? Label1.Text = "你沒有選擇要上載的文件或者上傳的文件長度為0!";
}
2.??? 文件也可以通過二進制的讀取后存放到數(shù)據(jù)庫的二進制的字段中:
byte[] fileCont = new byte[File1.PostedFile.ContentLength];
File1.PostedFile.InputStream.Read(fileCont,0, File1.PostedFile.ContentLength);
然后將此字節(jié)數(shù)組fileCont賦給數(shù)據(jù)庫的二進制字段的參數(shù),寫到數(shù)據(jù)庫中。
文件下載(轉(zhuǎn)載)
一.?? 服務(wù)端通過Response輸出相應(yīng)的HTTP Response Headers信息,和要下載的文件的數(shù)據(jù)來把文件發(fā)送到客戶端,HTTP Response Headers表現(xiàn)在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 ,你就可以將文檔指定成單獨打開(而不是在瀏覽器中打開),還可以根據(jù)用戶的操作來顯示。如果用戶要保存文檔,你還可以為該文檔建議一個文件名。這個建議名稱會出現(xiàn)在 Save As 對話框的“文件名”欄中。
打開位置:
attachment ―― 表示作為附件發(fā)送到客戶端,客戶端將單獨打開此文件。
inline ―― 表示將在瀏覽器中打開這個文件。
文件名:
filename ―― 表示發(fā)送到客戶端文件的文件名。
四.?? 準(zhǔn)備發(fā)送到客戶端的文件數(shù)據(jù):
1.??? 先將不同類型來源的數(shù)據(jù)轉(zhuǎn)成byte類型的數(shù)組,再通過Response.BinaryWrite方法發(fā)送到客戶端:
1.1.???讀取文件來獲得byte數(shù)組: string FileName;?//生成或獲取要發(fā)送到客戶端的文件名
string filePath = Server.MapPath("./") + FileName;?//假設(shè)文件在當(dāng)前目錄下
if(File.Exists(filePath) == false)
{
??? //服務(wù)器上沒有這個文件
??? return;
}
FileStream myFile = File.OpenRead(filePath);?//讀取文件進入FileStream
byte[] fileCont = new byte[myFile.Length];
myFile.Read(fileCont,0,(int)myFile.Length);? //將文件流中的內(nèi)容轉(zhuǎn)成byte數(shù)組
1.2.???在數(shù)據(jù)庫的二進制字段中讀取: //從url獲取圖片的id
string ImageId = Request.QueryString["img"];
//構(gòu)建查詢語句
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);
通過上述三種方法獲得的文件內(nèi)容的byte數(shù)組就可以用來輸出了:
Page.Response.BinaryWrite(fileCont);
Page.Response.End();
2.??? 直接讀取文件輸出: string FileName;?//生成或獲取要發(fā)送到客戶端的文件名
string filePath = Server.MapPath("./") + FileName;?//假設(shè)文件在當(dāng)前目錄下
if(File.Exists(filePath) == false)
{
??? //服務(wù)器上沒有這個文件
??? return;
}
Page.Response.Clear();
Page.Response.AddHeader( "Content-Type", "image/gif" );?//根據(jù)MIME的不同設(shè)置
Page.Response.AddHeader("Content-Disposition", "inline;filename=" + filePath);
Page.Response.WriteFile(filePath);
Page.Response.End();
內(nèi)容結(jié)束//
轉(zhuǎn)載于:https://www.cnblogs.com/microchuan/archive/2006/04/18/377770.html
總結(jié)
以上是生活随笔為你收集整理的文件上传下载小结一(转载)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Label中的自动换行
- 下一篇: 写好软件的75条