このFAQの最新版は、Software ArtisansのWebサイトをご覧ください。
サーバーオブジェクトエラー'ASP
0177:80040154' Server.CreateObject Failed'
正式なRFCはhttp://info.internet.isi.edu/in-notes/rfc/files/rfc1867.txt Form-based File Upload in HTMLに記載されています。
Internet Explorer 4.0は、RFC1867をサポートしています。IE3.02(32ビット)では、標準仕様であるRFC1867(
つまり、現在では、あなたのユーザーがNetscapeまたはIEからファイルアップロードが実行できる単一のフォームを使用できるということです。ActiveX Controlや、ブラウザ固有のページを追加する必要はなくなりました。Netscapeでは、フォームを次のように定義してください。
<FORM ENCTYPE="multipart/form-data" ACTION="formresp.asp" METHOD="POST">
Enter Filename: <INPUT TYPE="FILE" NAME="F1">
<INPUT TYPE="SUBMIT">
</FORM>
現在、これはInternet Explorerでも使用できます!
Internet Explorerバージョン4には、アドオンなしで、この本来の機能が組み込まれています。ただし、IE
3.02とIE 4とではRFC1867のインプリメンテーションが異なります。
Internet ExplorerのRFC1867のサポートには、次のような問題があります。
IE3.02を利用してのアップロードする場合は、NT Challenge/Response権限を利用することができません。KB article、Q169546を参照してください。
IE 4では、この問題は解決しています。詳細については、Setting
Appropriate Securityを参照してください。
IE 3.02には進行状況インジケータが付いていません。そのため、ユーザーが大きなファイルを、低速回線でアップロードしているときは進行状況が確認できません。
IE4では、進行状況インジケータが提供されていますのでアップロードの状況を確認することができます。
IEのRFC1867サポートについての詳細は、KB article、Q161395を参照してください。
使用しているISPが、あらかじめコンポーネントを登録する必要があります。登録の方法は、手作業でのインストールプロセスの手順2にあります。通常、InstallShieldのセットアップ中に自動で行われます。
ASPのRequest.Form オブジェクトの代わりに、
以下は、
ASPインテグレーション:
VBScriptには、長い文字列の後方検索を可能にするInstrRev機能が組み込まれています。この機能を使うと、"\"を使用してファイル名だけを、または、"."を使って拡張子を抽出できます。以下サンプルコードです。
NewFileName = Mid(upl.UserFilename, InstrRev(upl.UserFilename, "\") + 1)
この現象は、Internet Explorer 3.02より前のバージョンのように、使用されているブラウザがRFC1867をサポートしていないことが原因です。このブラウザは、<INPUT TYPE="FILE">の定義を参照し、<INPUT TYPE="text" SIZE="20" NAME="name">と解釈しています。テキストボックスにはファイル名が入っているため、これがブラウザによって送信される唯一の情報になります。また、全てのフォーム情報同様、ファイル名もURL暗号化されます(この場合ファイル名には'%xy'が含まれています)。
アップロードは、RFC1867と呼ばれるインターネット標準規格によって処理されます。この規格は、通常のHTMLフォームとは異なるエンコードスキーマを使用します。通常のHTMLは、以下のように定義されます。
<FORM METHOD="POST" ACTION="PROCESS.ASP">
ファイルをアップロードするには、追加属性を指定する必要があります。
<FORM METHOD="POST" ACTION="PROCESS.ASP" ENCTYPE="MULTIPART/FORM-DATA">
この属性は、大容量データを転送する場合、効率を上げるためフォームの暗号化タイプ(ENCTYPE)を変更します。しかし、この暗号化タイプは、ASPのRequest.Formメソッドでは解釈されません。そのため、他のフォームデータからファイル情報を切り離すことができません。
あります。ASPに組み込まれたServer.Mappath("\vroot")機能を使用し、仮想パスを物理パスにマッピングします。そのコードは、以下のようになります。
upl.SaveAs Server.Mappath("\upload") & "\" & filename
Secure Sockets Layer(SSL)を使用することにより、ファイルは転送中に暗号化できます。既にサーバーが認証を用いて設定されていて、WebアプリケーションがSSLを使用できれば、全ての転送とアップロードは、転送時にファイルを暗号化します。URLには、'http:'"の代わりに'https:を使用して下さい。
また、
パフォーマンス:
Authentication: FTPアップロードでは、匿名アクセスを許すか、大変多くのユーザーアカウントを管理しなければなりません。Webアプリケーションを経由したアップロードでは、管理負担も少なく、アプリケーションがアップロードが許可された人物の判別を行います。
これは、通常、ASPスクリプトが含まれたディレクトリまたは仮想ルートに、実行権限が設定されていないことを意味しています。この設定を修正するには、以下の作業を行ってください。
Internet Service Managerを開きます。
これは、"Class not registered"(クラスが登録されていない)エラーです。もう一度、DLL上のRegsvr32を実行し、レジストレーション中にエラーが発生するかどうか調べてください。
レジストリを手作業で検査することもできます。以下を検索してください。
HKEY_CLASSES_ROOT\SoftArtisans.FileUp\CLSID
これにはFB3F89EFの値が入っていなければなりません。
レジストリのチェック後もエラーが続く場合は、SAFILEUP.DLLファイルのNTFS権限を検査してください。
IIS(通常はIUSR_machinenameとして実行)は、このファイルとこのファイルが存在するディレクトリの両方に読み取り権限と実行権限が必要です。
CreateObjectが失敗した場合、
これは通常、Internet Information Server / Active Serverの最新バージョンを稼動させていないことを意味します。詳細については、インストールの手引きを参照してください。
|
|
ただし、最新のASPバージョンをインストールしてもこの問題が解決されない場合があります。このようにエラーが解決されない場合は、アップロードが実行されていない可能性があります。これは、MicrosoftのHotfixのインストール解説が不正確であることが原因の場合もあります。このような場合は次の処理を行ってください。
|
48 KB以上のファイルを転送しようとした時、フォームの処理中のスクリプトにエラーが発生したか、古いバージョンのHTTPプロキシサーバーを使用している恐れがあります。小さいファイルを送信し、その結果を確認してください。
(フォームの処理中のスクリプトにエラーが発生した場合)以下の順序でエラーが発生しています。
ブラウザが、HTTP TCPストリームを通して大きなファイルを送ろうとしています。
サーバー上では、最初の48KBをIISが読み込み、続いて
このエラーは古いHTTPプロキシサーバーを使用した場合にも発生します。たとえば、Netscape Proxy Server V1.0は、48KBを超えるHTTP Postを受け付けません。Netscape Proxy Server V2.5以降のバージョンの場合は、この問題は完全に解決されています。ブラウザにネットワークエラーが表示された場合は、受け手側で読み込まれたデータより、HTTP TCPストリームへ送ったデータの方が大きいことが原因です。
Copyright ゥ 2000 Software Artisans, Inc. All rights reserved.