インターネット上には ASP 暗号化文字用の MD5 が多数あり、非常に一般的ですが、ASP 言語自体の制限のため、ファイル用の MD5 は実際には非常にまれです。文字列の md5 はプレーン テキストを不可逆的に暗号化して、データの保存または送信のセキュリティを確保できることがわかっています。同様に、ファイルの md5 暗号化は、ネットワーク送信中にファイルが変更および検証されないことを保証するためにも使用されます。これは、アップロードされた写真やファイルが一意であることを保証するために、個人のサイトでも使用されます。原則として、サーバーにアップロードした後、アップロードされたファイルの md5 値が同時にデータベースに記録されるため、次回同じファイルがアップロードされるときにデータベースにクエリを実行して、その値が正しいかどうかを確認できます。ファイルの場合、md5 値が同じであるとみなします。実際、Baidu にもこの分野のアプリケーションがあります。 Baidu の画像の場合、画像をクリックすると、「次のリンクをクリックしてこの画像を表示することもできます: XXX URL」という場合があります。原理は同じで、ファイルは md5 です。
さっそく始めましょう。
1. asp は、xml 対話モードを通じて .Net プログラムを呼び出し、ファイル md5 を実装します。
独自の言語の制限により、ASP はファイルの md5 を実装できませんが、.net は実際にそれを実行できます。.net を介してファイルに対して md5 を実行し、その情報を asp に送信して受信することは可能ですか。 ASP の md5 は実現できますか? 回答 それは確かです。これには、ASP と .NET プログラムの間の対話が含まれます。以前に ASP クラスを作成しました。「ASP Processing XML Data Sending and Receiving Classes」は、私の Baidu スペース(http://hi.baidu.com /manbutianmi)で参照できます。 /blog/item/dec182fc6db36587b801a0f6.html は、XML データを送受信する ASP 処理に関するもので、さまざまな異種システム間の API インターフェイス間の通信に使用できます。この記事はこのクラスの応用です。コードは次のとおりです。ASP
側コード
xmlcls.asp
<%
Rem は XML データのクラスの送受信を処理します
'------------------------------------------------ -
'この著作権情報は再版の際に保持する必要があります
作者:ウォークマン
ウェブサイト:モバイルテーマネットワーク:http://www.shoji138.com
'バージョン:ver1.0
'------------------------------------------------ -
クラスXmlクラス
Rem変数の定義
プライベート XmlDoc、XmlHttp
プライベートメッセージコード、SysKey、XmlPath
プライベート m_GetXmlDoc,m_url
プライベート m_XmlDocAccept
Rem の初期化
プライベートサブクラス_Initialize()
エラー時は次へ再開
メッセージコード = ""
XmlPath = ""
Set XmlDoc = Server.CreateObject("msxml2.FreeThreadedDOMDocument.3.0")
XmlDoc.ASYNC = False
エンドサブ
レムがオブジェクトを破壊する
プライベートサブクラス_Terminate()
IsObject(XmlDoc) の場合は、XmlDoc = Nothing を設定します
IsObject(m_XmlDocAccept) の場合は、m_XmlDocAccept = Nothing を設定します
IsObject(m_GetXmlDoc) の場合、m_GetXmlDoc = Nothing を設定します
エンドサブ
'パブリック属性の定義を開始します---------------
レムのエラーメッセージ
パブリック プロパティ Get Message()
メッセージ = メッセージコード
終了プロパティ
XMLの送信先アドレスをレムします
Public プロパティ Let URL(str)
m_url = 文字列
終了プロパティ
'パブリック属性定義の終了--------------------------
'プライベートプロセスとメソッドの開始--------------------------
RemロードXML
プライベートサブLoadXmlData()
If XmlPath <> "" then
XmlDoc.Load(XmlPath) ではない場合
XmlDoc.LoadXml "<?xml version=""1.0"" encoding=""gb2312""?><root/>"
終了の場合
それ以外
XmlDoc.LoadXml "<?xml version=""1.0"" encoding=""gb2312""?><root/>"
終了の場合
End Sub
Rem 文字変換
プライベート関数 AnsiToUnicode(ByVal str)
ディム i、j、c、i1、i2、u、fs、f、p
AnsiToUnicode = ""
p = ""
For i = 1 To Len(str)
c = Mid(str, i, 1)
j = AscW(c)
j < 0 の場合
j = j + 65536
終了の場合
j >= 0かつ j <= 128の場合
p = "c" の場合
AnsiToUnicode = " " & AnsiToUnicode
p = "e"
終了の場合
AnsiToUnicode = AnsiToUnicode & c
それ以外
p = "e" の場合
AnsiToUnicode = AnsiToUnicode & " "
p = "c"
終了の場合
AnsiToUnicode = AnsiToUnicode & ("&#" & j & ";")
終了の場合
次
終了機能
Rem 文字変換
プライベート関数 strAnsi2Unicode(asContents)
Dim len1,i,varchar,varasc
strAnsi2Unicode = ""
len1=LenB(内容として)
len1=0 の場合、関数を終了します
i=1からlen1の場合
varchar=MidB(asContents,i,1)
varasc=AscB(varchar)
varasc > 127 の場合
If MidB(asContents,i+1,1)<>"" then
strAnsi2Unicode = strAnsi2Unicode & chr(ascw(midb(asContents,i+1,1) & varchar))
終了の場合
i=i+1
それ以外
strAnsi2Unicode = strAnsi2Unicode & Chr(varasc)
終了の場合
次
終了機能
Rem はファイルに文字を追加します
Private Sub WriteStringToFile(ファイル名,str)
エラー時は次へ再開
ディム fs,ts
Set fs= createobject("script_ing.filesystemobject")
IsObject(fs) でない場合は Sub を終了します
Set ts=fs.OpenTextFile(Server.MapPath(ファイル名),8,True)
ts.writeline(str)
ts.close
ts=何も設定しない
fs=何も設定しない
エンドサブ
'プライベートプロセスとメソッドの終了--------------------------
'パブリック メソッドの開始 --www.devdao.com----------------------
'''''''''' XML 部分を送信して開始します
Rem 外部 XML ファイルから XmlDoc オブジェクトを設定します
パブリック サブ LoadXmlFromFile(パス)
XmlPath = Server.MapPath(パス)
LoadXmlData()
エンドサブ
Rem XmlDoc オブジェクトに文字列を入力します
パブリック サブ LoadXmlFromString(str)
XmlDoc.LoadXml str
エンドサブ
Rem は、NodeValue "appID",AppID,1,False などのノード パラメーターを設定します。
'------------------------------------------------ -
'パラメータ:
'NodeName ノード名
'NodeText値
'NodeType 保存タイプ [text=0,cdata=1]
'blnEncode エンコードするかどうか [true, false]
'------------------------------------------------ -
Public Sub NodeValue(Byval NodeName,Byval NodeText,Byval NodeType,Byval blnEncode)
Dim ChildNode、CDATASection の作成
ノード名 = Lcase(ノード名)
XmlDoc.documentElement.selectSingleNode(NodeName) が何もない場合
Set ChildNode = XmlDoc.documentElement.appendChild(XmlDoc.createNode(1,NodeName,""))
それ以外
ChildNode = XmlDoc.documentElement.selectSingleNode(NodeName) を設定します。
終了の場合
blnEncode = True の場合
NodeText = AnsiToUnicode(NodeText)
終了の場合
NodeType = 1 の場合
ChildNode.Text = ""
Set CreateCDATASection = XmlDoc.createCDATASection(Replace(NodeText,"]]>","]]>"))
ChildNode.appendChild(createCDATASection)
それ以外
ChildNode.Text = ノードテキスト
終了の場合
エンドサブ
'------------------------------------------------ -
'送信されたパケットXML内のノードの値を取得します
'パラメータ:
'Strノード名
'------------------------------------------------ -
パブリック プロパティ GetXmlNode(ByvalStr)
XmlDoc.documentElement.selectSingleNode(Str) が何もない場合
XmlNode = "NULL"
それ以外
XmlNode = XmlDoc.documentElement.selectSingleNode(Str).text
終了の場合
終了プロパティ
'------------------------------------------------- --- ---
'返されたXMLデータオブジェクトを取得します
'例:
'GetXmlData が NULL でない場合、GetXmlData は XML オブジェクトです
'------------------------------------------------ -
パブリック プロパティ GetGetXmlData()
GetXmlData = m_GetXmlDoc を設定します
終了プロパティ
'------------------------------------------------ -
'XMLパッケージを送信
'------------------------------------------------ -
Public Sub SendHttpData()
Dim i、GetXmlDoc、LoadAppid
Set Xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0")
Set GetXmlDoc = Server.CreateObject("msxml2.FreeThreadedDOMDocument.3.0") ' XML パッケージを返します
XmlHttp.Open "POST"、m_url、false
XmlHttp.SetRequestHeader "コンテンツタイプ"、"テキスト/xml"
XmlHttp.XmlDoc の送信
'Response.Write strAnsi2Unicode(xmlhttp.responseBody)
GetXmlDoc.load(XmlHttp.responseXML) の場合
m_GetXmlDoc = GetXmlDoc を設定します
それ以外
MessageCode = "データのリクエスト中にエラーが発生しました!"
出口サブ
終了の場合
GetXmlDoc = なしを設定します
XmlHttp = なしを設定します
エンドサブ
'------------------------------------------------ -
'送信要求XMLデータを印刷
'------------------------------------------------ -
Public Sub PrintSendXmlData()
応答.クリア
Response.ContentType = "テキスト/xml"
Response.CharSet = "gb2312"
応答.期限切れ = 0
Response.Write "<?xml version=""1.0""coding=""gb2312""?>"&vbNewLine
Response.Write XmlDoc.documentElement.XML
エンドサブ
'------------------------------------------------ -
'返された XML データを出力します
'------------------------------------------------ -
Public Sub PrintGetXmlData()
応答.クリア
Response.ContentType = "テキスト/xml"
Response.CharSet = "gb2312"
応答.期限切れ = 0
IsObject(m_GetXmlDoc) の場合
Response.Write "<?xml version=""1.0""coding=""gb2312""?>"&vbNewLine
Response.Write m_GetXmlDoc.documentElement.XML
それ以外
Response.Write "<?xml version=""1.0"" encoding=""gb2312""?><root></root>"
終了の場合
エンドサブ
Rem は、送信リクエスト XML データを sendxml_date.txt という名前のファイルに保存します。
Public Sub SaveSendXmlDataToFile()
Dim ファイル名、str
ファイル名 = "sendxml_" & DateValue(now) & ".txt"
str = ""
str = str & ""& Now() & vbNewLine
str = str & " ------------------------------------------- --- "&vbNewLine
str = str & "<?xml version=""1.0"" encoding=""gb2312""?>" & vbNewLine
str = str & XmlDoc.documentElement.XML & vbNewLine
str = str & " ------------------------------------------- --- "&vbNewLine
str = str & vbNewLine & vbNewLine & vbNewLine
WriteStringToFile ファイル名,str
エンドサブ
Rem は、返された XML データを getxml_date.txt という名前のファイルに保存します。
Public Sub SaveGetXmlDataToFile()
Dim ファイル名、str
ファイル名 = "getxml_" & DateValue(now) & ".txt"
str = ""
str = str & ""& Now() & vbNewLine
str = str & " ------------------------------------------- --- "&vbNewLine
IsObject(m_GetXmlDoc) の場合
str = str & "<?xml version=""1.0"" encoding=""gb2312""?>" & vbNewLine
str = str & m_GetXmlDoc.documentElement.XML
それ以外
str = str & "<?xml version=""1.0""coding=""gb2312""?>" & vbNewLine & "<root>" & vbNewLine & "</root>"
終了の場合
str = str & vbNewLine
str = str & " ------------------------------------------- --- "&vbNewLine
str = str & vbNewLine & vbNewLine & vbNewLine
WriteStringToFile ファイル名,str
エンドサブ
'------------------------------------------------ -
'返されたxmlのノード情報を取得
'XmlClassObj.GetSingleNode("//msg")
'------------------------------------------------ -
パブリック関数 GetSingleNode(nodestring)
IsObject(m_GetXmlDoc) の場合
GetSingleNode = m_GetXmlDoc.documentElement.selectSingleNode(nodestring).text
それ以外
GetSingleNode = ""
終了の場合
終了機能
''''''''''''''''''xml 部分の送信終了
''''''''''''''''''受信 XML 部分が開始されます
'------------------------------------------------ -
'XML パッケージを受信、エラー情報は Message オブジェクトを通じて取得されます
'------------------------------------------------ -
パブリック関数 AcceptHttpData()
ディムXMLdom
XMLdom = Server.CreateObject("Microsoft.XMLDOM") を設定します。
XMLdom.Async = False
XMLdom.Load(リクエスト)
XMLdom.parseError.errorCode <> 0 の場合、次に
MessageCode = "データを正しく受信できません" & "Descript_ion: " & XMLdom.parseError.reason & "<br>Line: " & XMLdom.parseError.Line
m_XmlDocAccept = Null を設定します
それ以外
m_XmlDocAccept = XMLdom を設定します
終了の場合
終了関数
'---------------------------------------------- --- ---
'XML パッケージ ノード情報を受信するために戻ります
'XmlClassObj.GetSingleNode("//msg")
'------------------------------------------------ -
パブリック関数 AcceptSingleNode(nodestring)
IsObject(m_XmlDocAccept) の場合
AcceptSingleNode = m_XmlDocAccept.documentElement.selectSingleNode(nodestring).text
それ以外
AcceptSingleNode = ""
終了の場合
終了機能
'------------------------------------------------ -
'受信側で受信したXMLデータを出力します
'------------------------------------------------ -
Public Sub PrintAcceptXmlData()
応答.クリア
Response.ContentType = "テキスト/xml"
Response.CharSet = "gb2312"
応答.期限切れ = 0
IsObject(m_XmlDocAccept) の場合
Response.Write "<?xml version=""1.0""coding=""gb2312""?>"&vbNewLine
Response.Write m_XmlDocAccept.documentElement.XML
それ以外
Response.Write "<?xml version=""1.0"" encoding=""gb2312""?><root></root>"
終了の場合
エンドサブ
Rem は、受信した XML パケット データを acceptxml_date.txt という名前のファイルに保存します。
Public Sub SaveAcceptXmlDataToFile()
Dim ファイル名、str
ファイル名 = "acceptxml_" & DateValue(now) & ".txt"
str = ""
str = str & ""& Now() & vbNewLine
str = str & " ------------------------------------------- --- "&vbNewLine
IsObject(m_XmlDocAccept) の場合
str = str & "<?xml version=""1.0"" encoding=""gb2312""?>" & vbNewLine
str = str & m_XmlDocAccept.documentElement.XML
それ以外
str = str & "<?xml version=""1.0""coding=""gb2312""?>" & vbNewLine & "<root>" & vbNewLine & "</root>"
終了の場合
str = str & vbNewLine
str = str & " ------------------------------------------- --- "&vbNewLine
str = str & vbNewLine & vbNewLine & vbNewLine
WriteStringToFile ファイル名,str
エンドサブ
''''''''''''''''xml 部分を受信し、
デバッグ データを debugnote_date.txt という名前のファイルに保存します。
Public Sub SaveDebugStringToFile(debugstr)
Dim ファイル名、str
ファイル名 = "debugnote_" & DateValue(now) & ".txt"
str = ""
str = str & ""& Now() & vbNewLine
str = str & " ------------------------------------------- --- "&vbNewLine
str = str & debugstr & vbNewLine
str = str & " ------------------------------------------- ---」
str = str & vbNewLine & vbNewLine & vbNewLine
WriteStringToFile ファイル名,str
End Sub
'パブリックメソッドの終了--------------------------
終了クラス
%>
filemd5fun.asp
<!--#Include File="xmlcls.asp"-->
<%
Rem はファイルの md5 を取得します。パラメータはファイル名です
関数 GetFileMD5(ファイル名)
Const Apisysno = "k8n6g2b0m1a6b0f6e8" 'インターフェイスの不正な適用を防ぐために、インターフェイスのキー値は一貫している必要があります
DimXmlClassObj
Set XmlClassObj = new XmlClass 'オブジェクトの作成
XmlClassObj.LoadXmlFromString("<?xml version=""1.0""coding=""gb2312""?><root/>") 'XMLDOC オブジェクトに XML 文字を入力し、それを使用して XML を送信します
XmlClassObj.URL = " http://www.shoji138.com/aspnet2/FileMD5.aspx " '応答 URL を設定します。これは実際の URL に変更する必要があります。
Rem XML形式
レム "<?xml version="1.0" encoding="gb2312"?>
レム<ルート>
レム<sysno></sysno>
レム <apiaction></apiaction>
レム <ファイル名></ファイル名>
レム</root>
XmlClassObj.NodeValue "sysno",Apisysno,0,False '不正な適用を防ぐためのインターフェイスのキー値
XmlClassObj.NodeValue "apiaction","createfilemd5",0,False '複数の目的でインターフェイスを定義するために使用されるインターフェイスの応答アクション
XmlClassObj.NodeValue "filename",filename,0,False 'ファイル パスとファイル名、相対パスを使用します'
XmlClassObj.SaveSendXmlDataToFile() 'デバッグ目的で、送信された XML データベース パッケージを txt ファイルに保存します
XmlClassObj.SendHttpData() 'XML データを送信します
'XmlClassObj.SaveGetXmlDataToFile() '受信したxmlデータを保存
Rem処理結果
Dimメッセージ、ステータス
status = XmlClassObj.GetSingleNode("//status") 'ステータスを表示します。OK であれば成功を意味し、それ以外の場合はエラーが発生します
message = XmlClassObj.GetSingleNode("//message") 'ステータスが OK でない場合、メッセージはエラー メッセージです。
XmlClassObj = Nothing を設定します
。 status = "OK" の場合は、
GetFileMD5 = メッセージ
それ以外
GetFileMD5 = ""
終了の場合
関数の終了
%>
test.asp
<!--#Include File="filemd5fun.asp"-->
<%
Response.Write "web.config の md5 値は次のとおりです:" & GetFileMD5("web.config") & "<br />"
Response.Write "files/logo-yy.gif の md5 値は次のとおりです:" & GetFileMD5("files/logo-yy.gif") & "<br />"
Response.Write "xmlcls.asp の md5 値は次のとおりです:" & GetFileMD5("xmlcls.asp") & "<br />"
%>
.net サイドコード:
MD5.cs
システムを使用する;
System.Collections.Generic を使用します。
System.Text を使用します。
System.IO
名前空間 Winsteps.FileMD5
を使用します。
{
パブリッククラス MD5
{
パブリック静的文字列 md5_hash(文字列パス)
{
試す
{
FileStream get_file = 新しい FileStream(パス、FileMode.Open、FileAccess.Read、FileShare.Read);
System.Security.Cryptography.MD5CryptoServiceProvider get_md5 = 新しい System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] hash_byte = get_md5.ComputeHash(get_file);
文字列 resule = System.BitConverter.ToString(hash_byte);
resule = resule.Replace("-", "");
結果を返します。
}
catch (例外 e)
{
e.メッセージを返します。
}
}
}
FileMD5.aspx
<%
@ Page Language="C#" AutoEventWireup="true" CodeBehind="FileMD5.aspx.cs" Inherits="Winsteps.FileMD5.FileMD5" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns=" http://www.w3.org/1999/xhtml " >
<head runat="サーバー">
<title>モバイルテーマの Web サイト: http://www.shoji138.com</title>
</head>
<本文>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
FileMD5.aspx.cs
システムを使用します。
System.Data を使用します。
System.Configuration を使用します。
System.Collections を使用します。
System.Web を使用します。
System.Web.Security を使用します。
System.Web.UI を使用します。
System.Web.UI.WebControls を使用します。
System.Web.UI.WebControls.WebParts を使用します。
System.Web.UI.HtmlControls を使用する;
System.Xml を使用する。
System.Configuration
名前空間 Winsteps.FileMD5
を使用します。
{
パブリック部分クラス FileMD5 : System.Web.UI.Page
{
protected void Page_Load(オブジェクト送信者, EventArgs e)
{
文字列sysno = "11111";
文字列ステータス = "False";
文字列メッセージ = "不明なエラー";
文字列 net2sysno = ConfigurationManager.AppSettings["sysno"];
XmlDocument ドキュメント = 新しい XmlDocument();
試す
{
doc.Load(Request.InputStream);
sysno = doc.SelectSingleNode("//sysno").InnerText.Trim();
if (net2sysno != sysno)
{
message = "違法なアプリケーションです!";
}
それ以外
{
文字列ファイル名 = Server.MapPath(doc.SelectSingleNode("//ファイル名").InnerText.Trim());
メッセージ = MD5.md5_hash(ファイル名);
ステータス = "OK";
}
}
catch(例外例)
{
メッセージ = ex.メッセージ;
}
ついに
{
if (ドキュメント != null)
ドキュメント = null;
}
Response.Clear(); //HTML 文字をクリアします。
Response.ContentType = "テキスト/xml";
Response.Charset = "GB2312";//XML文字列に中国語が含まれている場合
Response.Write("<?xml バージョン="1.0" エンコーディング="GB2312"?>");
Response.Write("<ルート>");
Response.Write(" <ステータス>" + ステータス + "</ステータス>");
Response.Write(" <メッセージ>" + メッセージ + "</メッセージ>");
Response.Write("</root>");
応答.End()
;
}
}
Web.config
<?xml version="1.0"coding="utf-8"?>
<構成>
<アプリ設定>
<add key="sysno" value="k8n6g2b0m1a6b0f6e8"></add>
</アプリ設定>
<システム.ウェブ>
<httpRuntime 実行タイムアウト = "3600" maxRequestLength = "1048576" />
<コンパイルデバッグ="true" デフォルト言語="c#" />
<customErrors モード = "オフ" />
<identity impersonate="true"/>
<認証モード="フォーム">
<forms name="forums" path="/" loginUrl="Login.aspx" protection="All" timeout="40">
</forms>
</認証>
<pages validateRequest="false"></pages>
<グローバリゼーション requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" uiCulture="zh-CN"/>
</system.web>
</設定>
web.config の sysno は、filemd5fun.asp の Apisysno と一致している必要があります。セキュリティを確保するために、特定のアプリケーション中にこのキーを独自の値に変更する必要があります。
デモのアドレス: http://www.shoji138.com/aspnet2/filemd5.asp
コードは長いですが、ASP が XML データを asp.net に送信します (XML には md5 となるファイル名が含まれます) -> asp.net がその XML を受信し、そのファイルに対して md5 を実行します -> asp.net が戻ります。結果を xml 経由で asp に送信します (xml には取得した md5 値が含まれます) -> asp は返された xml を取得し、md5 値を解析します。
適用範囲:
1. 2 つのシステム間でファイルを転送する場合、送信前にファイル md5 を実行し、送信後にファイル md5 を実行して、2 つの値が等しいかどうかを確認できます。それらが等しい場合は、送信プロセス中に変更されていないことを意味します。
2. アップロード システムでは、同じファイルをアップロードできないことが必要な場合、アップロードされたファイルの md5 をデータベースに保存できます。これにより、次回同じファイルをアップロードする場合、その md5 がデータベースに保存されます。同様であり、アップロードは拒否されます。
3. 検索エンジンおよび Xunlei b2b ソフトウェアでは、ファイル md5 の場合、ファイル名が同じかどうかに関係なく、同じ md5 を持つファイルは同じファイルとみなされ、複数のソースからファイルを共有できます。
4. その他のアプリケーション。 。 。 。 。
2. asp は COM コンポーネントを介して md5 を実装します (コンポーネントはサーバーに登録する必要があります)
。asp ファイル md5 コンポーネントを登録します。ダウンロード アドレス: DelphiASPObj.in_path=Server.Mappath("Web.config") 'ファイル パス
Response.Write "web.config の md5 値は次のとおりです:" & DelphiASPObj.get_path_md5 & "<br />"
DelphiASPObj=nothing を設定します
%>
3. ファイル md5 を取得する 2 つの方法の比較。
最初の方法は、asp.net プログラムで XML データを操作してファイルの md5 を取得する方法です。サーバーは、一般的な仮想ホストをサポートする必要があります。 asp.net環境ですが、価格は高くなります。
2 番目の方法は、COM コンポーネントを登録することによって実装されます。これにはサーバーのアクセス許可が必要で、サーバーを所有している人により適しています。
さらに、最初の対話方法により ASP がより柔軟になり、データ対話のために 2 つの異なるサーバーで使用でき、さまざまな異種プラットフォームで広く使用できます。
4. ダウンロード アドレスについては、私の Web サイトおよびモバイル テーマ ネットワークにアクセスしてデモを表示し、プログラム パッケージのデモ アドレスをダウンロードしてください: http://www.shoji138.com/aspnet2/filemd5.asp
プログラムダウンロード パッケージダウンロード: