佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > ASP.NET+XML打造網(wǎng)絡(luò)硬盤(pán)原理分析

ASP.NET+XML打造網(wǎng)絡(luò)硬盤(pán)原理分析

熱門(mén)標(biāo)簽:銀行業(yè)務(wù) 科大訊飛語(yǔ)音識(shí)別系統(tǒng) Linux服務(wù)器 Mysql連接數(shù)設(shè)置 阿里云 電子圍欄 團(tuán)購(gòu)網(wǎng)站 服務(wù)器配置
常用傳輸方式及其在特定環(huán)境下面臨的困難

  我們經(jīng)常有這樣的應(yīng)用需求:通過(guò)網(wǎng)絡(luò)交換公共數(shù)據(jù)文件以實(shí)現(xiàn)資源共享,同時(shí)保護(hù)私有數(shù)據(jù)不被非法訪問(wèn),并使用簡(jiǎn)單、直觀的方式操作。我們常用的文件傳輸FTP、Email郵件、網(wǎng)上鄰居都能實(shí)現(xiàn)文件的傳送。其中,"Ftp"功能最為強(qiáng)大,但使用起來(lái)卻稍顯復(fù)雜,一大堆設(shè)置足以讓許多人望而止步,尤其用戶數(shù)量不可預(yù)見(jiàn)時(shí),針對(duì)特殊需求用戶的設(shè)置將更加繁瑣;"Email"是大家所熟悉的了,但它的傳送不僅需要你連入Internet,而且它的安全性也是個(gè)問(wèn)題,在企業(yè)內(nèi)部,財(cái)務(wù)、勞資等文件資料需通過(guò)這種方式交流不是好辦法;"網(wǎng)上鄰居"是又一種傳送文件的方法,通過(guò)在本機(jī)上指定共享的Web文件夾并放置資源文件,一定范圍內(nèi)的用戶可以訪問(wèn)到這些文件,然而這種方式使用的范圍相當(dāng)有限,通常在同一個(gè)DNS段地址內(nèi)的用戶才能順利訪問(wèn),其它尤其是Internet上的用戶,很難使用,此外同Email類似,它的使用也不直觀,很多時(shí)候你不得不在許多列表計(jì)算機(jī)上一層層展開(kāi)搜索才有可能獲取你想要的資源!

  由此看來(lái),以上三種方式雖然在一定程度上實(shí)現(xiàn)了文件數(shù)據(jù)的交流,但它們都主要面向"點(diǎn)對(duì)點(diǎn)"的傳送(你只能被動(dòng)地等對(duì)方放置數(shù)據(jù)而不能主動(dòng)"可視化"地索?。?,無(wú)法實(shí)現(xiàn)"一塊空間,資源互見(jiàn)"的應(yīng)用需求,這種基于"點(diǎn)對(duì)多"的共享方式需要尋求另外的傳輸途徑,網(wǎng)絡(luò)硬盤(pán)就是一種很好的解決方式。

  網(wǎng)絡(luò)硬盤(pán)的優(yōu)勢(shì)

  網(wǎng)絡(luò)硬盤(pán)(也稱共享空間),是服務(wù)器上的一塊硬盤(pán)空間,在這里,如果你具備足夠的權(quán)限,你可以對(duì)它隨意操作,就象使用你的本地計(jì)算機(jī)一樣。要知道,這一切以Http的方式傳輸,以Web的形式展現(xiàn)在所有用戶面前,通過(guò)瀏覽器這種熟悉的方式訪問(wèn),這樣,"一塊空間,資源互見(jiàn)"的共享模式得以實(shí)現(xiàn)!

  此外,網(wǎng)絡(luò)硬盤(pán)界面在客戶端運(yùn)行,它允許用戶提交數(shù)據(jù)到服務(wù)器,然后在指定的范圍內(nèi)管理這些信息,這種處理模式大量使用在實(shí)際開(kāi)發(fā)中,尤其是在構(gòu)建交互式網(wǎng)絡(luò)文檔管理系統(tǒng)方面:網(wǎng)上考試系統(tǒng)、文件傳輸系統(tǒng)、新聞發(fā)布系統(tǒng)以及公司競(jìng)標(biāo)系統(tǒng)等方面都有大量應(yīng)用!

  以下使用Asp.net(Visual C#語(yǔ)言實(shí)現(xiàn))和Xml(可擴(kuò)展標(biāo)記語(yǔ)言)開(kāi)發(fā)了這樣的網(wǎng)絡(luò)硬盤(pán)系統(tǒng)。關(guān)于程序的開(kāi)發(fā)細(xì)節(jié)及代碼中使用的關(guān)鍵技術(shù)和難點(diǎn),都有詳細(xì)的講解,參照這些說(shuō)明,你完全可以開(kāi)發(fā)出自己的網(wǎng)絡(luò)硬盤(pán)。

  網(wǎng)絡(luò)硬盤(pán)實(shí)現(xiàn)的功能

  我們的網(wǎng)絡(luò)硬盤(pán)實(shí)現(xiàn)了以下功能:

  1、查看文件夾內(nèi)容

  2、創(chuàng)建新文件夾同時(shí)可設(shè)置訪問(wèn)權(quán)限

  3、文件夾間的跳轉(zhuǎn):進(jìn)入下一級(jí),返回上一級(jí)

  4、上傳文件到指定文件夾

  5、下載文件到本機(jī)或在線查看文件內(nèi)容

  6、刪除文件或文件夾

  開(kāi)發(fā)細(xì)節(jié)及技術(shù)關(guān)鍵點(diǎn)

  1、查看文件夾內(nèi)容:

  程序一開(kāi)始將進(jìn)入指定的根文件夾(如\NetHard),這個(gè)文件夾下的內(nèi)容將通過(guò)數(shù)據(jù)綁定控件(DataGrid)來(lái)列表顯示,包括以下方面:類別(區(qū)別文件夾或文件)、名稱、權(quán)限(是否允許進(jìn)入文件夾?是否可以下載文件?)、刪除(是否允許刪除文件或文件夾?)以及針對(duì)文件夾的創(chuàng)建者。這里,由于文件夾中內(nèi)容動(dòng)態(tài)變化(你不知道什么時(shí)候就有用戶傳送了文件或新建了文件夾或刪除了它們),我們通過(guò)動(dòng)態(tài)創(chuàng)建數(shù)據(jù)表DataTable來(lái)讀取指定文件夾下的內(nèi)容, 然后作為數(shù)據(jù)源與顯示控件DataGrid綁定,這樣,數(shù)據(jù)的顯示就總是適時(shí)的。創(chuàng)建動(dòng)態(tài)表的函數(shù)如下:
復(fù)制代碼 代碼如下:

public DataTable Bind(string fullFolderPath)//創(chuàng)建數(shù)據(jù)表讀取文件夾內(nèi)容
{
//以下是動(dòng)態(tài)創(chuàng)建數(shù)據(jù)表的方法
DataTable dt=new DataTable();
DataRow dr;
//首先創(chuàng)建數(shù)據(jù)表結(jié)構(gòu)
dt.Columns.Add(new DataColumn("type",System.Type.GetType("System.String")));//類型
dt.Columns.Add(new DataColumn("name",System.Type.GetType("System.String")));//名稱
dt.Columns.Add(new DataColumn("action",System.Type.GetType("System.String")));//操作
dt.Columns.Add(new DataColumn("owner",System.Type.GetType("System.String")));//創(chuàng)建人
//為每一行填充數(shù)據(jù)
foreach(string d in Directory.GetFileSystemEntries(fullFolderPath)){
dr=dt.NewRow();//建新行
string[] parts=d.Split(new char[]{'\\'});
string txt=parts[parts.Length-1];//取最后一部分的字符串,它將可能是文件名或文件夾
dr[1]=txt;//名稱name
if(File.Exists(d))//如果是文件
{
dr[0]="文件";//類型type
int pos=currFullPath.IndexOf("NetHard");
string relaUrl=currFullPath.Substring(pos);
string
url="http://10.80.50.1/SharedSpace/"+relaUrl+"/"+txt;//
10.80.50.1為作者服務(wù)器地址,你應(yīng)該將它修改為你所在服務(wù)器地址
dr[2]="a href="+url+" target=_blank"+">下載/a>";
}
else if(Directory.Exists(d)){//如果是文件夾
dr[0]="文件夾";//type類型
string password=GetFolderPassword(d);//取得文件夾密碼信息
int type=GetFolderLimitType(d);
if((password!="no")(type!=1))
dr[2]="a
href=PasswordValidate.aspx?path="+d+">密封/a>";//操作action
else
dr[2]="a href=Default.aspx?path="+d+">進(jìn)入/a>";//操作action
dr[3]=GetFolderOwner(d);//取文件夾創(chuàng)建者名
}
else
Response.Write("script>alert('無(wú)對(duì)象可綁定!')/script>");
dt.Rows.Add(dr);//添加行
return dt;//返回?cái)?shù)據(jù)表
}
}

  這個(gè)方法取出指定文件夾下的內(nèi)容分別處理:如果是文件,就顯示"下載"鏈接指向服務(wù)器上文件的Url地址;對(duì)文件夾需要視保護(hù)與否及保護(hù)類型進(jìn)一步區(qū)別處理:若"進(jìn)入受限"則顯示"密封"導(dǎo)入到密碼驗(yàn)證頁(yè),"進(jìn)入不受限"時(shí)修改查詢字符串,顯示"進(jìn)入"鏈接指向初始顯示頁(yè)。

  2、創(chuàng)建新文件夾及設(shè)置訪問(wèn)權(quán)限:

  輸入新文件夾名后,你就可以在當(dāng)前路徑下創(chuàng)建新的文件夾,Asp.net下遠(yuǎn)程創(chuàng)建新文件夾和在本地機(jī)操作完全一樣,非常的簡(jiǎn)單,.Net的IO名字空間提供了專門(mén)的類庫(kù)Directory,通過(guò)調(diào)用其方法就可以實(shí)現(xiàn),語(yǔ)句如下:

Directory.CreateDirectory(string directory)

  其中,字符串directory表示新建文件夾的完整路徑,這個(gè)方法默認(rèn)向所有用戶開(kāi)放新文件夾的完全讀寫(xiě)訪問(wèn)權(quán)限。特殊地,對(duì)網(wǎng)絡(luò)硬盤(pán)共享根文件夾(程序中示例為"NetHard"文件夾,你可以更改它)的創(chuàng)建你還可以手動(dòng)進(jìn)行,對(duì)應(yīng)地,你需要手動(dòng)設(shè)置以開(kāi)放此文件夾的寫(xiě)入權(quán)限,在IIS下,你可以在"internet信息服務(wù)"下,對(duì)該文件夾執(zhí)行"權(quán)限向?qū)?來(lái)設(shè)置訪問(wèn)權(quán)限。

  資源共享時(shí)應(yīng)該考慮安全性。這里,你可以設(shè)置用戶對(duì)該文件夾的訪問(wèn)權(quán)限,通過(guò)設(shè)置密碼,你可以指定是否允許用戶進(jìn)入該文件夾,是否允許刪除該文件夾,或者兩者都禁止。這樣,你可以保護(hù)自己的文件,將它們獨(dú)占訪問(wèn)或者限制在一個(gè)特定的范圍內(nèi)(這個(gè)范圍的成員應(yīng)該知道你的密碼),這樣,產(chǎn)品研發(fā)部門(mén)可以共用一個(gè)文件夾,財(cái)務(wù)部門(mén)也通過(guò)同樣的方式共用另一個(gè)文件夾,不屬于這個(gè)部門(mén)的人員將限制訪問(wèn)。當(dāng)然,這樣的限制你也可以應(yīng)用到單個(gè)文件上(這樣的應(yīng)用似乎不多,程序未實(shí)現(xiàn))。

  此外,為了管理這些文件夾,你需要保留它們的設(shè)置信息:文件夾名、位置、受限操作類型、密碼及創(chuàng)建人等。程序中將這些信息寫(xiě)入一Xml文件(此為folder.xml文件),隨后對(duì)文件夾的各種管理操作均通過(guò)讀寫(xiě)該xml文件來(lái)進(jìn)行,以下方法就實(shí)現(xiàn)了新建文件夾時(shí)設(shè)置信息的存儲(chǔ):
復(fù)制代碼 代碼如下:

public void CreateXmlOrAddFrag(string xmlFullPath,string
folderFullPath,string owner,string password,int type){
XmlDocument xmlDoc=new XmlDocument();
string xml="";
string xmlNode="character>";
xmlNode+="fullPath>";
xmlNode+=folderFullPath;
xmlNode+="/fullPath>";
xmlNode+="owner>";
xmlNode+=owner;
xmlNode+="/owner>";
xmlNode+="password>";
xmlNode+=password;
xmlNode+="/password>";
xmlNode+="type>";
xmlNode+=type;
xmlNode+="/type>";
xmlNode+="/character>";
if(!File.Exists(xmlFullPath)){//不存在則創(chuàng)建xml存儲(chǔ)文件
xml="?xml version='1.0' encoding='gb2312'?>";
xml+="folder>";
xml+=xmlNode;
xml+="/folder>";
xmlDoc.LoadXml(xml);
xmlDoc.Save(xmlFullPath);//存儲(chǔ)文件
}
else{//存在xml存儲(chǔ)文件則添加新的文檔片段
xmlDoc.Load(xmlFullPath);
XmlDocumentFragment
docFrag=xmlDoc.CreateDocumentFragment();//文檔片元素節(jié)點(diǎn)
docFrag.InnerXml=xmlNode;
XmlNode currNode=xmlDoc.DocumentElement;//獲取文檔根節(jié)淀
currNode.InsertBefore(docFrag,currNode.FirstChild);//插入文檔段
xmlDoc.Save(xmlFullPath);//存儲(chǔ)改變
}
}

  其中,參數(shù)fileFullPath是存儲(chǔ)文件夾信息的xml文件路徑,folderFullPath是此新文件夾路徑,owner是創(chuàng)建人名,password是密碼,type表示限制操作的類型("0"表示進(jìn)入受限,"1"表示刪除受限)。在程序運(yùn)行之初,存儲(chǔ)文件夾信息的folder.xml文件可能尚不存在,所以程序中首先判斷這個(gè)文件是否存在,不存在則動(dòng)態(tài)創(chuàng)建這個(gè)文件,這之后新建文件夾時(shí),將只需要添加文檔片段。這里,對(duì)Xml文件的讀寫(xiě)通過(guò)DOM(文檔對(duì)象模型)來(lái)實(shí)現(xiàn),由于此處Xml文件不會(huì)太大,這種方式不會(huì)對(duì)內(nèi)存資源要求太高,速度也會(huì)很快!

  3、對(duì)文件及文件夾的操作:

  對(duì)文件的操作包括"下載"和"刪除"兩種,在上面列表顯示指定文件夾中內(nèi)容時(shí),針對(duì)文件,有這樣的語(yǔ)句:

dr[2]="a href="+url+" target=_blank"+">下載/a>";//建立聯(lián)接地址

  其中,url是指定文件對(duì)應(yīng)的服務(wù)器路徑。 通過(guò)這樣的鏈接將文件定位到服務(wù)器上的對(duì)應(yīng)位置。視文件格式的不同,客戶端可以下載文件到本機(jī)上,也可以就在服務(wù)器上打開(kāi)它。

  刪除文件很簡(jiǎn)單,.Net的IO命名空間的File類庫(kù)有這樣的方法:

File.Delete(string filename);其中,filename為文件的完整路徑

  你需要注意的是,文件的刪除將不需要驗(yàn)證,要防止文件被刪除,你需要依照下面的方式來(lái)進(jìn)行。(當(dāng)然,程序中為避免文件誤刪除提供了確認(rèn)驗(yàn)證,文件夾刪除也一樣?。?

  對(duì)文件夾的操作分為:進(jìn)入或者刪除。如果文件夾在創(chuàng)建時(shí)被設(shè)置"進(jìn)入受限"或者"刪除受限",用戶在執(zhí)行這樣的操作時(shí)將被要求密碼驗(yàn)證,只有通過(guò)驗(yàn)證才能完成相應(yīng)的操作,這種方式保護(hù)了你的文件被非法訪問(wèn)或刪除。

  相對(duì)文件的刪除,文件夾的刪除程序要稍微復(fù)雜些,.Net的Directory類庫(kù)提供的方法Delete()只能刪除空文件夾,這就需要我們首先清空文件夾中內(nèi)容,然后才能完成這一操作,由于文件夾中還可能再包含有文件夾,我們通過(guò)遞歸調(diào)用來(lái)實(shí)現(xiàn)這一操作:
復(fù)制代碼 代碼如下:

//刪除文件夾的方法
public void DeleteFolder(string dir)
{
foreach(string d in Directory.GetFileSystemEntries(dir))
{
if(File.Exists(d))
File.Delete(d);//直接刪除其中的文件
else
DeleteFolder(d);//遞歸刪除子文件夾
}
Directory.Delete(dir);//刪除已空文件夾
}

  其中,參數(shù)dir是待刪除文件夾的完整路徑。程序使用循環(huán)語(yǔ)句,查找文件夾中的內(nèi)容,是文件則直接刪除,如果是文件夾,則遞歸調(diào)用方法自身來(lái)刪除子文件夾,文件夾清空后再完成刪除操作。

  4、文件上傳:

  要實(shí)現(xiàn)網(wǎng)絡(luò)硬盤(pán)的功能,必須要有可供操作的文件,這些文件來(lái)自于客戶端的上傳(當(dāng)然,服務(wù)器端也能提供這些文件,但這不是網(wǎng)絡(luò)硬盤(pán)的重點(diǎn)),過(guò)去我們實(shí)現(xiàn)文件的上傳,在Asp中通常是使用第一些文件上傳組件,比如Microsoft 的PostingAcceptor組件,另外還有第三方提供的一些付費(fèi)組件(不過(guò)說(shuō)真的,這些組件并不好用)。那時(shí)候想要自己開(kāi)發(fā)這樣的文件上傳組件,相當(dāng)繁瑣;而現(xiàn)在,.Net提供的類庫(kù)HttpPostedFile和HttpFilesCollection可以很容易地訪問(wèn)上載到服務(wù)器的文件,同時(shí)使開(kāi)發(fā)人員控制文件上載過(guò)程。其中的HttpPostedFile類封裝已經(jīng)上傳到服務(wù)器的文件對(duì)象,其方法和屬性提供對(duì)每個(gè)文件的內(nèi)容和屬性的訪問(wèn);HttpFileCollection類則為多個(gè)HttpPostedFile對(duì)象提供一個(gè)容器,用作保存上傳給服務(wù)器的數(shù)據(jù)結(jié)構(gòu)的類,這樣你就可以利用被傳送的文件集合,該文件集合可通過(guò)其Files屬性從HttpRequest 對(duì)象訪問(wèn),一旦服務(wù)器接收了請(qǐng)求的整個(gè)內(nèi)容,該集合就可以訪問(wèn)。這些內(nèi)置的組件使得Asp.net中實(shí)現(xiàn)文件上傳相當(dāng)容易,甚至只需要幾行代碼就可以了!關(guān)于Asp.net中實(shí)現(xiàn)文件上傳的文章很多,這里不做專門(mén)的闡述,需要的話你可以參考那些文章,這里,只提示你需要注意以下幾點(diǎn):

  1)、客戶端表單的編碼類型Enctype 設(shè)置為multipart/form-data的MIME格式,提交表單使用Http的post方法,象下面這樣:

form id="form1" method="post" enctype="multipart/form-data/form-data" runat="server" >

  2)、HttpInputFile控件運(yùn)行在服務(wù)器端,設(shè)置runat=server,type=file ,象下面這樣:

INPUT id="fileUp" type="file" size="6" runat="server">

  3)、要上傳多個(gè)文件,你可以布置多個(gè)HttpInputFile控件,然后使用HttpRequest.Files來(lái)獲取這些文件。

  5、環(huán)境配置文件Web.config的處理:

  在中文狀態(tài)下,你可能需要將全球化設(shè)置編碼由默認(rèn)的"Utf-8"改為"gb2312",語(yǔ)句如下:

復(fù)制代碼 代碼如下:

globalization
requestEncoding="gb2312"
responseEncoding="gb2312"
/>


  同時(shí),Web.config默認(rèn)設(shè)置的的文件大小限制可能并不能滿足你的需要,你或許需要將限制尺度放大一些。這通過(guò)修改參數(shù)maxRequestLength的值來(lái)實(shí)現(xiàn),如下所示:
復(fù)制代碼 代碼如下:

!-- 設(shè)置可接受的最大字節(jié)數(shù) -->
httpRuntime maxRequestLength="500000">
/httpRuntime>


  6、隨時(shí)跟蹤"當(dāng)前路徑"值:

  程序中的另一個(gè)關(guān)鍵點(diǎn)是關(guān)于"當(dāng)前路徑"的,由于你總是需要在不同的文件夾之間跳轉(zhuǎn):點(diǎn)擊"進(jìn)入"到達(dá)下一級(jí)文件夾,點(diǎn)擊"上一級(jí)文件夾"返回前一級(jí)文件夾;而所有這些文件夾的內(nèi)容都通過(guò)同一個(gè)頁(yè)面(Default.aspx)來(lái)顯示,這個(gè)顯示頁(yè)面被設(shè)置為始終顯示當(dāng)前文件夾下內(nèi)容。在你傳送查詢字符串來(lái)調(diào)用它時(shí),你需要在查詢字符串中包含當(dāng)前路徑的完整表示,這在程序中通過(guò)設(shè)置一個(gè)靜態(tài)變量來(lái)實(shí)現(xiàn):public static string currFullPath=""; 當(dāng)前路徑發(fā)生改變時(shí),總是將這個(gè)路徑值傳送給這個(gè)靜態(tài)標(biāo)量:

  currFullPath=Request["path"];這就使得這個(gè)靜態(tài)變量始終存儲(chǔ)著當(dāng)前的路徑值,以這個(gè)靜態(tài)變量為查詢字符串調(diào)用顯示頁(yè): Response.Redirect("Default.aspx?path="+currFullPath)就總能顯示當(dāng)前文件夾下的內(nèi)容了!

  參考資料:

《Asp.net程序員參考手冊(cè)》、《XML高級(jí)編程》、《C#高級(jí)編程》、微軟MSDN

  運(yùn)行環(huán)境:

  程序在:Windows XP中文正式版、.Net Frameworks 正式版、Visual Studio.Net中文正式版下調(diào)試通過(guò),在局域網(wǎng)(總部+多個(gè)異地子公司模式)上穩(wěn)定運(yùn)行
您可能感興趣的文章:
  • ASP.NET設(shè)計(jì)網(wǎng)絡(luò)硬盤(pán)之文件夾實(shí)現(xiàn)
  • asp.net 網(wǎng)絡(luò)硬盤(pán)實(shí)現(xiàn)分析
  • ASP.NET設(shè)計(jì)網(wǎng)絡(luò)硬盤(pán)之兩重要類代碼
  • ASP.NET設(shè)計(jì)網(wǎng)絡(luò)硬盤(pán)之查看文件夾實(shí)現(xiàn)代碼
  • ASP.NET設(shè)計(jì)網(wǎng)絡(luò)硬盤(pán)之上傳文件實(shí)現(xiàn)代碼
  • ASP.NET設(shè)計(jì)網(wǎng)絡(luò)硬盤(pán)之下載或在線查看實(shí)現(xiàn)代碼
  • ASP.NET設(shè)計(jì)網(wǎng)絡(luò)硬盤(pán)之刪除文件夾實(shí)現(xiàn)代碼
  • Asp.net mvc實(shí)時(shí)生成縮率圖到硬盤(pán)

標(biāo)簽:蚌埠 衡水 大理 江蘇 棗莊 廣元 衢州 萍鄉(xiāng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《ASP.NET+XML打造網(wǎng)絡(luò)硬盤(pán)原理分析》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    通州市| 黄平县| 舞钢市| 旬阳县| 浏阳市| 梁山县| 池州市| 保德县| 柯坪县| 波密县| 龙南县| 商洛市| 黎城县| 电白县| 乌恰县| 鹤岗市| 麻城市| 内黄县| 文山县| 吉隆县| 屏东市| 中超| 彰武县| 通州市| 桃园县| 高陵县| 德兴市| 新蔡县| 东光县| 马关县| 泗水县| 西城区| 泾源县| 辰溪县| 汪清县| 萨嘎县| 天气| 新沂市| 醴陵市| 武胜县| 江油市|