Html標簽,file方式,上傳文件


 

恩,如果不記下來,記憶就會模糊掉。

 

希望自己下次看見這篇博客的時候,會解決掉疑問

--------------------------------------------------------------------

 
        
<form method="post" enctype="multipart/form-data" action="Upload.ashx" >
        <input type="file" name="fileName" />
        <input type="submit" name="上傳" />
    </form>

enctype屬性設置為multipart/form-data,瀏覽器會把上傳的文件名和文件數據放在結構體內,傳給Action中指向的文件中。

 

 

1.第一步,我們要首先獲取到,傳過來的結構體內的文件數據。

HttpPostedFile file=context.Request.Files[0];

  

因為這里我們設置只有一個file,只會傳一個文件。所以后面index中的值直接給0。

 

 

2.驗證用戶點擊上傳表單之后,file中是否為空

if (file.ContentLength > 0)

 

這里用的驗證是ContentLength 獲得傳遞Http傳遞的實體長度,file為空,則返回false

 

3.獲得用戶上傳文件的,文件名及拓展名。

//Path.GetFileName(path)以獲得文件名

//Path.GetExtension(path)獲得文件拓展名

 

string oldfileName = Path.GetFileName(file.FileName); //獲得文件名+拓展名
string fileExt = Path.GetExtension(oldfileName);     //獲得拓展名

  

4.判斷用戶上傳的文件,是否為圖片。驗證后綴名

...省略

5.用Guid重寫用戶上傳的文件名

 //使用Guid時,只需Guid.NewGuid()

string newFileName = Guid.NewGuid().ToString();

  

 

6.新建目錄,並判斷站點中是否含有此路徑,如沒有則新建

 //Dicectory.Exists(Path)此方法用來確定,磁盤上是否具有相同路徑,返回Bool

//Directory.CreateDirectory(Path) 此方法用來生成目錄和子目錄。

string dir = "/UpLoad/" + DateTime.Now.Year + DateTime.Now.Month + DateTime.Now.Day;
                if (!Directory.Exists(context.Request.MapPath(dir)))
                {
                    Directory.CreateDirectory(context.Request.MapPath(dir));
                }

  


7.拼湊文件名-帶路徑。

 

 string fullFileName = dir + newFileName + fileExt;

  

 

8.上傳文件

//SavsAs(完整文件名) 上傳文件。

file.SaveAs(context.Request.MapPath(fullFileName)); 


9.輸出

 

..略

------------------------------------------------------------------------------------------------------------------------------

留給自己的問題。

1.上傳一個文件,那么在瀏覽器內部發生了什么?Http協議怎么傳輸?

2.為什么enctype寫在action后不生效?

3.此過程發生在哪個階段?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM