亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

用DELPHI為ASP開發(fā)文件上載組件

2019-11-18 18:57:23
字體:
供稿:網(wǎng)友
ASP(Active Server Page)是微軟公司的產(chǎn)品,由于它編程很容易上手,能快速開發(fā)功能強(qiáng)大的動態(tài)網(wǎng)站,現(xiàn)在很多網(wǎng)站(特別是Intranet/Extranet內(nèi)部網(wǎng))采用了NT+IIS+ASP的模式,使得ASP成為目前較為流行的網(wǎng)站開發(fā)腳本語言。在WEB服務(wù)中,文件上載服務(wù)是一個很常見的功能,而WIN9X下的PWS沒有提供相關(guān)組件;NT下的IIS提供了一個Post Acceptor組件,但由于它要檢查用戶的WWW訪問權(quán)限而變得不太好用;也可以從Internet上下載有關(guān)組件,但這些大多都是商業(yè)組件,用于下載的是試用版,在使用時間或功能上都有限制。由于ASP可以調(diào)用標(biāo)準(zhǔn)的OLE/COM組件,我們可以用VB/VC/DELPHI等高級編程工具根據(jù)我們自己的要求來定制自己的ASP文件上載組件,滿足自己的應(yīng)用系統(tǒng)要求。

下面將討論用DELPHI為ASP開發(fā)文件上載組件的原理和具體實現(xiàn)過程。


一、文件上載的實現(xiàn)原理

基于Web方式數(shù)據(jù)上傳,要遵從RFC1867標(biāo)準(zhǔn),上載的文件數(shù)據(jù)也不例外。如用下面HTML頁面文件(delphiup.htm)選擇上載文件:

<!-- DelphiUp.htm:文件上載界面 -->

<html><head><title>文件上載</title></head><body>

用DELPHI編寫的文件上載組件實現(xiàn)文件上載

<form NAME="UploadForm" ACTION="delphiup.asp" METHOD="POST" ENCTYPE="mult
<p>文件另存為:<input TYPE=text NAME="SaveAs">

<p>請要選擇上載的文件:<input TYPE=file NAME="FileData">

<input type="submit" name="b1" value="確認(rèn)上載"> </p>

</form>

</body></html>

當(dāng)客戶端選擇了一個文件(如Test.TXT,其內(nèi)容為“這里是一個用于上載的文件的內(nèi)容?!保┎?BR>
“確認(rèn)上載”按鈕提交數(shù)據(jù)后,服務(wù)器端程序收到的數(shù)據(jù)將具有如下形式:

-----------------------------7cf1d6c47c#13#10

Content-Disposition: form-data; name="SaveAs"#13#10#13#10

NewFileName#13#10

-----------------------------7cf1d6c47c#13#10

Content-Disposition: form-data; name="FileData"; filename="D: est.txt"

Content-Type: text/plain#13#10#13#10

這里是一個用于上載的文件的內(nèi)容。#13#10

-----------------------------7cf1d6c47c#13#10

Content-Disposition: form-data; name="b1"#13#10#13#10

確認(rèn)上載#13#10

-----------------------------7cf1d6c47c--

其中,“-----------------------------7cf1d6c47c”是分界符,用于分隔表單(Form)中的各個域;

#13#10是回車換行符的DELPHI表示。我們可以這樣認(rèn)為,每個表單域的信息描述,都是以分界符加一對回車換行符#13#10開始;表單域名以“name="”開始,以“"”為結(jié)束;表單域值以兩對回車換行符#13#10#13#10開始,以一對回車換行符#13#10#加分界符結(jié)束;文件名稱以“filename="”開始,以“"”為結(jié)束。有了這些標(biāo)志,我們就可以獲取表單域的名稱和值以及要上載的文件的名稱,從而實現(xiàn)文件數(shù)據(jù)的讀取和存儲了。


二、文件上載的實現(xiàn)過程

在理解上面提到的數(shù)據(jù)格式后,自己動手編寫一個文件上載組件對我們來說已經(jīng)不是困難了。


(一)開始建立一個ASP組件的工程

如果您對用DELPHI開發(fā)OLE Automation Server的步驟不太熟悉的話,請參見《電子與電腦》1999年第06期的一篇文章《用DELPHI開發(fā)用于ASP的OLE Automation Server 》。

這里只簡要介紹一下操作步驟。

1、建立ActiveX Library工程

在DELPHI中選擇菜單File=》New...,在“New Item”對話框的ActiveX選項卡中選擇“ActiveX Library”,DELPHI會自動創(chuàng)建一個DLL工程
PRoject1。

2、建立Automation組件

在DELPHI中選擇菜單File=》New...,在“New Item”對話框的ActiveX選項卡中選擇“Automation Object”;然后在“Automation Object Wizard”對話框中輸入Class Name(如“UploadFile”),Instancing選擇“Multiple Instance”即可,單擊“OK”后DELPHI會自動創(chuàng)建一個TLB(Type Library)文件Project1_TLB.PAS和一個PAS(Unit)文件Unit1.PAS。在Type Library設(shè)計窗口中,將Project1改名為MyUpload,則該文件上載組件的OLE注冊碼為“MyUpload.UploadFile”。

3、引入ASP類型庫

為了使用ASP的五個內(nèi)建對象(Request、Response、Server、application、session),需要引入ASP類型庫。我們主要利用Request對象讀取從客戶端傳遞到服務(wù)器端的數(shù)據(jù)。

在Project菜單中選擇“Import Type Library”,在“Import Type Library”對話框的“Type Libraries”列表選擇“Microsoft Active Server Pages Object Library(Version 2.0)”(如果沒有這個選項,請確定您的計算機(jī)上安裝了IIS3以上或PWS4以上并且ASP.DLL已正確注冊),DELPHI會自動創(chuàng)建一個TLB文件ASPTypeLibrary_TLB.PAS,其中有我們需要的ASP對象類型聲明。

4、定義OnStartPage、OnEndPage過程

當(dāng)在ASP頁面上用Server.CreateObject創(chuàng)建一個OLE對象實例時,WEB服務(wù)器會調(diào)用其方法OnStartPage,將ASP應(yīng)用環(huán)境信息傳遞給該對象,我們可以在該過程中獲取客戶端信息;當(dāng)在ASP頁面中釋放一個OLE對象實例時,WEB服務(wù)器會調(diào)用其方法OnEndPage,我們可以在該過程中進(jìn)行釋放內(nèi)存等結(jié)束操作。在我們這個組件中,我們要用到其OnStartPage方法。

OnStartPage方法應(yīng)該在Unit1.PAS中定義,OnStartPage的函數(shù)原型為:

procedure OnStartPage(AScriptingContext: IUnknown);

其中參數(shù)AScriptingContext是一個IScriptingContext類型變量,包含五個屬性(Request、Response、Server、Application、Session)分別對應(yīng)ASP的五個內(nèi)建同名對象。

我們需要在TLB定義窗口(View=》Type Library)中,為IUploadFile增加方法OnStartPage,其Declaration語句為“procedure OnStartPage(AScriptingContext: IUnknown);”。


(二)提取客戶端上傳的數(shù)據(jù)

該工作可以放在OnStartPage過程中進(jìn)行。

利用AScriptingContext的屬性Request(類型為IRequest)中的屬性TotalBytes(請求信息內(nèi)容長度)和方法BinaryRead可將客戶端上傳的請求信息數(shù)據(jù)讀取到一個Byte類型的數(shù)組中,然后按RFC1867標(biāo)準(zhǔn)定義的數(shù)據(jù)格式來分析和提取數(shù)據(jù)。

1、首先定義TUploadFile的幾個私有變量

在單元文件UP01.PAS(由Unit1.PAS另存)中加入對ASPTypeLibrary_TLB.PAS的引用(Uses),

然后加入

private

FContentLength : LongInt;//請求信息內(nèi)容長度

FContentData : Variant;//內(nèi)容數(shù)據(jù),以數(shù)組形式存儲請求信息內(nèi)容

FFileName, //要上載的文件名稱

FDelimeter : string; //表單域分界符

FScriptingContext : IScriptingContext;//ASP處理上下文環(huán)境內(nèi)容

FFileDataStart, //文件數(shù)據(jù)開始位置

FFileDataEnd : LongInt; //文件數(shù)據(jù)結(jié)束位置


2、提取客戶端上傳的請求信息數(shù)據(jù)

//在OnStartPage事件中,獲取ASP上下文信息、請求信息內(nèi)容、表單域的分界符、文件數(shù)據(jù)

procedure TUploadFile.OnStartPage(AScriptingContext: IUnknown);

var

ARequest : IRequest; //WWW請求對象

AOleVariant : OleVariant; //記錄請求信息內(nèi)容長度

intDelimterLength : integer;//分界符長度

longIndex,ALongInt,longPos : LongInt;

ContentData : AnsiString;//請求信息內(nèi)容的字符串表示

strTemp : string;

FindEndOfFileData : boolean;//是否找到文件數(shù)據(jù)結(jié)束位置

begin

//提取客戶端上傳的請求信息數(shù)據(jù)

FScriptingContext := AScriptingContext as IScriptingContext;//獲取ASP上下文信息

ARequest := FScriptingContext.Request;//獲取WWW請求信息

FContentLength := ARequest.TotalBytes;//請求信息內(nèi)容長度

//創(chuàng)建動態(tài)數(shù)組,用于以數(shù)組形式存儲請求信息內(nèi)容

FContentData := VarArrayCreate( [0,FContentLength], varByte );

//將請求信息內(nèi)容存儲到數(shù)組中

AOleVariant := FContentLength;

FContentData := ARequest.BinaryRead( AOleVariant );//讀取請求信息內(nèi)容

//將請求信息內(nèi)容轉(zhuǎn)化為字符串,便于定位

ContentData := ';

for longIndex := 0 to FContentLength - 1 do

begin

ContentData := ContentData + chr( Byte( FContentData[ longIndex ] ));

if FContentData[ longIndex ] = 0 then break;//0表示內(nèi)容結(jié)束

end;


3、獲取分界符、上載文件名稱

//獲取表單域的分界符

longPos := pos( #13#10,ContentData );//回車換行符所在位置

FDelimeter := Copy( ContentData,1,longPos-1);//該位置之前的內(nèi)容為分隔符


//獲取帶源路徑的文件名稱,在請求信息內(nèi)容中,文件名稱以

//filename="path/filename"的形式存儲

strTemp := 'filename="';//文件名稱在“filename="”之后

longPos := pos( strTemp, ContentData );//獲取“filename="”位置

if longPos <= 0 then

begin

FFileName := ';

FFileDataStart := -1;

FFileDataEnd := -2;

exit;

end;

//獲取下個雙引號“"”之前的內(nèi)容,即帶源路徑的文件名稱

longPos := longPos + length( strTemp );

strTemp := ';

for longIndex := longPos to FContentLength - 1 do

if ContentData[ longIndex ] <> '"' then

strTemp := strTemp + ContentData[ longIndex ]

else break;

FFileName := strTemp;


4、獲取文件數(shù)據(jù)的在請求信息內(nèi)容中的開始、結(jié)束位置

//文件數(shù)據(jù)開始位置在文件名稱后的第一個#13#10#13#10之后

delete( ContentData, 1, longIndex );

strTemp := #13#10#13#10;

FFileDataStart := longIndex + pos(strTemp, ContentData) + length(strTemp) - 1;


//文件數(shù)據(jù)結(jié)束位置在下一個#13#10和分界符之前

//由于文件數(shù)據(jù)可能包含非法字符,不能再用字符串定位函數(shù)POS

//查找下一個分界符的位置

FFileDataEnd := FFileDataStart;

intDelimterLength := length( FDelimeter );

FindEndOfFileData := false;

while FFileDataEnd <= FContentLength - intDelimterLength do

begin

FindEndOfFileData := true;

for ALongInt := 0 to intDelimterLength - 1 do

if Byte( FDelimeter[ ALongInt + 1 ] ) <>

FContentData[ FFileDataEnd + ALongInt ] then

begin

FindEndOfFileData := false;

break;

end;

if FindEndOfFileData then break;

FFileDataEnd := FFileDataEnd + 1;

end;

if not FindEndOfFileData then FFileDataEnd := FFileDataStart - 1//未找到分界符

else FFileDataEnd := FFileDataEnd - 3;//分界符,向前跳過#13#10

end;


(三)向ASP程序傳遞信息

在進(jìn)行了(二)的操作之后,我們的上載組件可以根據(jù)ASP程序的要求向其傳遞數(shù)據(jù)了。目前可以提供的數(shù)據(jù)有:客戶端源文件名稱(FFileName,含路徑)、文件大?。‵FileDataEnd-FFileDataStart+1)。

首先應(yīng)該在TLB設(shè)計窗口中聲明如下兩個方法GetFileName和GetFileSize。

1、返回客戶端源文件名稱(含路徑)

//返回客戶端源文件名稱(含路徑)

function TUploadFile.GetFileName: OleVariant;

begin

result := FFileName;//客戶端源文件名稱(含路徑)

end;

2、返回文件大小

//返回文件大?。˙ytes)

function TUploadFile.GetFileSize: OleVariant;

begin

result := FFileDataEnd - FFileDataStart + 1;

end;


(四)保存文件

在進(jìn)行了(二)的操作之后,我們的上載組件可以根據(jù)ASP程序的要求保存文件了。首先應(yīng)該在

TLB設(shè)計窗口中聲明如下兩個方法SaveFileAs和SaveFile。

1、按指定文件名稱保存文件

//按指定的文件名稱保存文件,參數(shù)FileName為指定的文件名稱,返回值True表示文件保存成功

function TUploadFile.SaveFileAs(FileName: OleVariant): OleVariant;

var

longIndex : LongInt;

AFile : file of byte;//以二進(jìn)制的形式保存文件

byteData : Byte;

begin

result := true;

try

assign( AFile, FileName );

rewrite( AFile );

for longIndex := FFileDataStart to FFileDataEnd do

begin

byteData := Byte( FContentData[ longIndex ] );

Write( AFile, byteData );

end;

CloseFile( AFile );

except

result := false;

end;

end;

2、按缺省文件名稱保存文件

//按缺省文件名稱保存文件,將文件以同名文件保存在調(diào)用頁面所在目錄

function TUploadFile.SaveFile: OleVariant;

var

CurrentFilePath : string;

begin

//獲取調(diào)用頁面所在目錄

CurrentFilePath := FScriptingContext.Request.ServerVariables['PATH_TRANSLATED'];

CurrentFilePath := ExtractFilePath( CurrentFilePath );

//保存文件

result := SaveFileAs( CurrentFilePath + ExtractFileName( FFileName ));

end;


三、上載組件應(yīng)用舉例

在我們的例子中,DelphiUp.HTM是文件上載界面,DelphiUp.ASP用來執(zhí)行文件上載操作。

DelphiUp.ASP的代碼如下:

<!--DelphiUp.ASP:文件上載處理頁面-->

<html><head><title>文件上載</title></head><body>

<% dim Upload, FileName

set Upload = Server.CreateObject("MyUpload.UploadFile")

FileName = Upload.GetFileName

Response.Write "<br>正在保存文件《"&FileName&"》......"

if Upload.SaveFile then

Response.Write "<br>文件《"&FileName&"》上載成功。"

Response.Write "<br>文件大小為"&Upload.GetFileSize&"字節(jié)。"

else

Response.Write "<br>文件《"&FileName&"》上載失敗。"

end if

set Upload=nothing %>

</body></html>


四、幾點說明

1、由DELPHI自動生成的源代碼編譯的DLL文件大小有215K,可以在

ASPTypeLibrary_TLB.PAS的Interface段中將Uses中的單元除ActiveX外全部刪除,在

MyUpload_TLB.PAS中刪除Uses中所有單元,則生成的DLL文件大小可減少到61K。

2、以上方法同樣適用于CGI程序,不過要用TWebRequest對象。


以上程序在PWIN98+Delphi3.0+PWS4.0下調(diào)試通過。


上一篇:用Delphi進(jìn)行OpenGL編程學(xué)習(xí)心得

下一篇:在Delphi程序中應(yīng)用IE瀏覽器控件

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網(wǎng)友關(guān)注

男女视频网站免费观看| 欧美成人剧情片在线观看| xxx欧美xxx| 亚洲理论电影网| 免费91在线视频| 免费黄色一级网站| 欧美日韩一区综合| 免费人成在线观看视频播放| 麻豆影院在线观看| 欧美男男gaytwinkfreevideos| 91国产丝袜在线放| 欧美激情综合五月色丁香小说| 一区视频网站| 欧美色欧美亚洲高清在线视频| 国产欧美一区二区视频| 日日干日日操| 欧美韩日一区二区三区四区| 亚洲污视频在线观看| 天堂资源av| 欧美精品一区二区三区视频| 久久久亚洲天堂| 日韩视频在线一区二区| 天天操夜夜操视频| 国产精品久久久久久久久男| 日韩国产精品久久久久久亚洲| 国产91精品一区二区麻豆网站| 麻豆视频在线观看| 最新黄色网址在线观看| 精品美女www爽爽爽视频| 久久国产小视频| 青青草原网站在线观看| 国产精品久久久久久网站| 91国产中文字幕| 亚洲不卡av一区二区三区| 视频在线一区二区三区| 国产精彩视频在线观看免费蜜芽| 午夜久久久久| 国产特黄在线| 久久精品久久99精品久久| 99久久夜色精品国产亚洲96| 久久久久久久久久久电影| 国产精品18久久久久| 交videos老少配com| 日本黄色免费片| 夫妇露脸对白88av| 午夜精品久久久久久久男人的天堂| 国产精品视频网址| 深夜福利免费在线观看| 亚洲级视频在线观看免费1级| 久久久一区二区三区捆绑**| 欧美一卡二卡三卡| 中文字幕亚洲不卡| 欧美国产日韩在线观看成人| 亚洲久久久久久久久久| 神马久久久久久久久久久| 精品国产亚洲一区二区麻豆| 亚洲一级片免费看| 中文在线天堂库| ww亚洲ww在线观看国产| 一级香蕉视频在线观看| 国产午夜精品麻豆| 制服丝袜专区在线| 久久精品aaaaaa毛片| 92看片淫黄大片欧美看国产片| 少妇高潮一区二区三区99| 专区另类欧美日韩| 女同性恋一区二区三区| 乱老熟女一区二区三区| 精品国产一区二区三区在线观看| 99这里只有精品视频| 欧美亚洲高清一区二区三区不卡| 亚欧无线一线二线三线区别| 亚洲videos| 国产精品综合一区二区| 激情成人在线观看| 久久精品视频在线观看榴莲视频| 国产激情一区二区三区四区| 国产丝袜视频在线播放| 亚洲色图另类色图| 国内自拍九色| 91在线观看地址| 精精国产xxxx视频在线| 欧美日韩爱爱视频| 黄页免费在线观看视频| 爽爽窝窝午夜精品一区二区| 在线观看中文字幕网站| 国产激情无码一区二区三区| 国产一区二区不卡老阿姨| 日韩欧美精品网址| 国产18精品乱码免费看| 国产精品高潮久久久久无| 欧美精品做受xxx性少妇| 久久性天堂网| 欧美精品在线观看| 午夜不卡福利视频| 欧美日韩高清在线播放| 精品电影在线| 91九色蝌蚪国产| 可以www视频| 亚洲色在线视频| 日本高清免费不卡视频| 亚洲图片在区色| 黑粗硬长欧美在线视频免费的| 欧美精品一区在线| 91影视免费在线观看| 久久黄色免费视频| www.综合网.com| 一区二区日韩免费看| h文在线观看免费| 超碰在线成人| 尤物tv国产一区| eeuss影院在线观看第一页| 亚洲精品一区二区三区福利| 国产精品久久久久久9999| 国产极品一区二区| 成人情趣视频网站| 图片区小说区区亚洲影院| 给个网站可以在线观看你懂的| 久久涩涩网站| 一区二区三区日韩视频| 亚洲欧美日韩专区| 欧美顶级xxxxbbbb| 中文字幕日韩有码| 成人淫片免费视频95视频| 日本人妻丰满熟妇久久久久久| 免费看黄色aaaaaa 片| 亚洲女同二女同志奶水| 九七影院97影院理论片久久| 日本欧美一区二区三区乱码| 久久综合88中文色鬼| 国产精品裸体一区二区三区| 我不卡一区二区| 日av在线播放中文不卡| 久久免费国产精品| 日本香蕉视频在线观看| 你懂的国产精品| 日韩国产精品一区二区| 欧美精品成人网| 在线观看的毛片| 欧美一级在线亚洲天堂| 成人国产一区二区| 你懂的国产精品| 久久久久久久香蕉| 欧美mv日韩mv国产| 免费观看性欧美大片无片| 成人a v视频| 亚洲激情免费视频| 日本在线观看网址| 国产欧美成人| 亚洲色大成网站www久久九九| 大桥未久在线播放| 成人激情小说网站| 成人黄色国产精品网站大全在线免费观看| 99精品视频在线观看播放| 亚洲精品一区av在线播放| 国产私拍福利精品视频二区| 日韩欧美一级精品久久| 亚洲国产欧美一区二区三区不卡| 牛夜精品久久久久久久99黑人| 久久精品国产露脸对白| 国产免费人人看| 午夜精品小视频| 亚洲欧美一级| 色婷婷av一区二区三区久久| 成人性生活免费看| 国产激情自拍视频| 国内福利写真片视频在线| 国产精品久久久久久久久久东京| 欧美在线观看视频一区二区三区| 亚洲第一主播视频| 五月天最新网址| 最新一本之道波多野结衣| 国产一区二区三区四区老人| 神马久久桃色视频| 一区二区视频在线免费| 暗呦丨小u女国产精品| 免费**毛片在线| 超清av在线| 91老师片黄在线观看| 精品免费视频一卡2卡三卡4卡不卡| 国产精品宾馆| 国产亚洲精品一区二555| 日韩欧美亚洲日产国产| 婷婷国产成人久久精品激情| 7777精品伊人久久久大香线蕉经典版下载| 国产视频一区在线播放| 中文字幕日韩在线| 99在线热播精品免费99热| 亚洲国产日韩欧美综合久久| 国产精品视频自在线| 日韩精品一区二区三区色偷偷| 国产精品日韩高清| 国产h视频在线观看| 欧美一级片久久久久久久| 在线欧美一区| 日韩精品一区二区三区四| 日韩电影免费观看高清完整版| 大杳蕉精品视频在线观看| 日韩在线网址| aaa级黄色片| 图片区小说区区亚洲影院| 国模视频一区| 欧美日韩亚洲在线观看| 国产ts人妖一区二区三区| 六月丁香婷婷色狠狠久久| 日本在线观看高清完整版| 中文文字幕文字幕高清| 青青草原网站在线观看| 538任你躁在线精品视频网站| 亚洲乱熟女一区二区| 国产精品爱久久久久久久| 成人动漫h在线观看| 国产乱人视频免费播放| 午夜欧洲一区| 97人人模人人爽视频一区二区| 五十路亲子中出在线观看| 免费看ww视频网站入口| 91精品国产免费久久综合| 欧美日韩破处视频| 亚洲乱码精品久久久久..| 亚洲免费电影在线观看| 精品久久久久成人码免费动漫| 国产日本欧美一区二区三区| 中文字幕精品在线播放| 成年人视频网站在线| 嫩呦国产一区二区三区av| 韩国av电影免费观看| 欧美日韩视频免费在线观看| 久久影院100000精品| 人妻少妇精品久久| 亚洲AV无码精品色毛片浪潮| 成人自拍偷拍| 亚洲播播91| 亚洲va在线va天堂成人| 久久aaaa片一区二区| 亚洲一区影音先锋| 国产精品www.| 四虎影院一区二区三区| 国产三级自拍视频| 久久亚洲成人精品| 国产精品一区无码| 亚洲欧美综合另类| 中老年在线免费视频| 欧美成人免费在线观看| 亚洲在线视频观看| 亚洲天堂网在线播放| 天天躁日日躁aaaa视频| 免费a级毛片在线观看| 成人av影视在线| baoyu777.永久免费视频| 麻豆久久一区| 欧美精品一区三区| 国产精品18毛片一区二区| 色综合色狠狠天天综合色| 日韩成人动漫在线观看| 成人a免费在线看| 性18欧美另类| 中文字幕中文在线不卡住| 欧美韩国亚洲| 中文成人综合网| 亚洲视频国产精品| 国产精品久久久久久久久男| 国风产精品一区二区| 日韩成人三级| 亚洲春色综合另类校园电影| 8x8ⅹ拨牐拨牐拨牐在线观看| 无码人妻丰满熟妇精品区| 久久精品国产99精品国产亚洲性色| 一本一本久久| 中日韩av电影| 国产综合在线观看视频| 中文成人无字幕乱码精品区| 大地资源网3页在线观看| 天堂中文在线官网| 99热国产精品| 激情小说亚洲色图| 另类的小说在线视频另类成人小视频在线| 日本xxxx高清色视频| 欧美成人猛片aaaaaaa| 一本大道熟女人妻中文字幕在线| 久草视频免费在线播放| 午夜性色一区二区三区免费视频| 精品久久香蕉国产线看观看gif| 亚洲大胆人体视频| 国产大片一区| 美日韩一区二区| 99这里只有精品| 老师让我她我爽了好久视频| 免费看国产黄色片| 精品久久美女| 久久婷婷国产综合精品青草| 亚洲最新免费视频| 国产不卡网站| 欧美xx在线| 性生活视频软件| 最新日韩精品| 美女诱惑黄网站一区| 亚洲高清一二三区| 在线免费观看一区二区| 色噜噜在线播放| 极品人妻一区二区| 精品少妇一区二区三区密爱| 日韩精品第一区| 欧美日韩国产成人在线免费| 久久综合伊人77777尤物| 日韩电影在线观看中文字幕| 第九区2中文字幕| 国产日韩精品视频一区二区三区| 2024最新电影免费在线观看| 五月天激情综合网| 99精品视频播放| 91麻豆精东视频| 免费试看一区| 久久一区二区三区超碰国产精品| 午夜精品久久久久久久久久久| 国产精品三区www17con| 男生裸体视频网站| 免费不卡亚洲欧美| 日韩一卡二卡在线观看| www.91av视频.com| 日本成人在线网站| 亚洲一区视频在线| 欧美日韩爆操| 中国老头性行为xxxx| 青草草在线视频| 无码人妻少妇伦在线电影| 91禁外国网站| 中文字幕在线不卡国产视频|