所謂“網(wǎng)絡(luò)硬盤(pán)”,就是將服務(wù)器的磁盤(pán)空間提供給用戶使用,用戶可以通過(guò)它在互聯(lián)網(wǎng)上實(shí)現(xiàn)文件的上傳,下載和刪除以及文件夾的創(chuàng)建與刪除。并可以通過(guò)共享文件實(shí)現(xiàn)文件的網(wǎng)絡(luò)共享。 實(shí)際要求是在客戶端完成對(duì)服務(wù)器系統(tǒng)文件或文件夾的訪問(wèn),創(chuàng)建和刪除等功能。 網(wǎng)絡(luò)硬盤(pán)的功能要求:
● 用戶登錄、注銷(xiāo)、用戶注冊(cè)
● 新建文件夾、上傳文件
● 查看文件屬性(包括:名稱(chēng),所在目錄,類(lèi)型,大小,創(chuàng)建時(shí)間)
● 刪除文件
● 更換文件圖標(biāo)(分為大圖標(biāo)和小圖標(biāo))
● 通過(guò)搜索找到自己的文件并可以下載
進(jìn)入時(shí)需有用戶名和密碼方能進(jìn)入,有效的保護(hù)了文件的機(jī)密。
網(wǎng)絡(luò)硬盤(pán)的開(kāi)發(fā)其實(shí)很簡(jiǎn)單,主要使用了類(lèi)庫(kù)Io,用來(lái)實(shí)現(xiàn)對(duì)文件的操作,采取了數(shù)據(jù)庫(kù)和物理路徑相對(duì)應(yīng)映射的方式完成的,下面就來(lái)簡(jiǎn)單說(shuō)說(shuō)其主要的幾個(gè)點(diǎn):
首先是數(shù)據(jù)庫(kù)設(shè)計(jì)這塊,根據(jù)自己的需求設(shè)計(jì)出最適合的數(shù)據(jù)庫(kù),我設(shè)計(jì)的數(shù)據(jù)庫(kù)分3個(gè)表,T_User,T_FileType,T_FileInfo
T_User

T_FileType

T_FileInfo

其次,我們知道網(wǎng)絡(luò)硬盤(pán)是滿足很多用戶的需求的,所以每個(gè)用戶都有屬于自己的空間,這就要求我們?cè)陧?yè)面中要用登錄和注冊(cè)功能,這里要提到的就是在注冊(cè)的時(shí)候我們就要相應(yīng)位用戶分配空間,名稱(chēng)最好不要直接用登錄名,可以采取映射的方式命名,如:用戶名是admin,那么物理路徑的目錄名就可以為adminDir,adminFile等等,主要是從安全方面考慮的,注冊(cè)完用戶后就會(huì)在物理空間中顯示初始創(chuàng)建的幾個(gè)文件夾

下面就是要對(duì)文件操作的幾點(diǎn)了

對(duì)文件的操作首先要保證數(shù)據(jù)庫(kù)與物理路徑要保持一致,比如說(shuō)增加一個(gè)文件,物理路徑添加了,數(shù)據(jù)庫(kù)也要有相應(yīng)的增加記錄才可以,沒(méi)什么大的問(wèn)題,在這里把下載的代碼貼出來(lái):
private void FileDownload(string FullFileName)//下載
{
FileInfo DownloadFile = new FileInfo(FullFileName); //設(shè)置要下載的文件
Response.Clear(); //清除緩沖區(qū)流中的所有內(nèi)容輸出
Response.ClearHeaders(); //清除緩沖區(qū)流中的所有頭
Response.Buffer = false; //設(shè)置緩沖輸出為false
//設(shè)置輸出流的 HTTP MIME 類(lèi)型為application/octet-stream
Response.ContentType = "application/octet-stream";
//將 HTTP 頭添加到輸出流
Response.AppendHeader("Content-Disposition",
"attachment;filename=" +
HttpUtility.UrlEncode(DownloadFile.FullName.Substring(FullFileName.LastIndexOf("http://") + 1),
System.Text.Encoding.UTF8));
Response.AppendHeader("Content-Length", DownloadFile.Length.ToString());
//將指定的文件直接寫(xiě)入 HTTP 內(nèi)容輸出流。
Response.WriteFile(DownloadFile.FullName);
Response.Flush(); //向客戶端發(fā)送當(dāng)前所有緩沖的輸出
Response.End(); //將當(dāng)前所有緩沖的輸出發(fā)送到客戶端
}
修改和轉(zhuǎn)移的邏輯很相似,修改目錄名稱(chēng)的時(shí)候,就是新建一個(gè)目錄,然后通過(guò)子目錄移到新目錄下面,在數(shù)據(jù)庫(kù)中采用遞歸修改子目錄和文件的路徑名稱(chēng),修改文件就更簡(jiǎn)單了,轉(zhuǎn)移也同樣如此...