ほとんどの場合、ファイルアップロードエラーの原因は、HTMLフォームにenctype
プロパティを追加するのを忘れていることです。
通常、通常のリクエストではenctype
プロパティを追加する必要はありません。ただし、ファイルをアップロードするときに、これをHTMLフォームに追加する必要があります。
enctype="multipart/form-data"
興味がありますが、enctype
プロパティがないとファイルのアップロードが機能しないのはなぜですか?
「multipart/form-data」enctypeは、RFC 1867で指定されており、技術的な概要については、 ここ を確認できます。
HTMLフォームでは、データはいくつかのフィールドとして表されます。 multipart/form-dataをencタイプとして使用する場合、ブラウザーはフォームフィールドを一連の「パーツ」として送信します。各パーツには、パーツに格納されているデータのタイプを説明するcontent-typeヘッダーがあります。このコンテンツタイプは通常、通常のフォームフィールドでは「text/plain」に設定されます。このコンテンツタイプは、multipart/form-dataenctypeが使用されている場合にのみブラウザによって送信されます。
タイプ「file」の入力要素の場合、コンテンツタイプは「application/octet-stream」または同様のものであり、フィールドのコンテンツが通常のプレーンテキストではなくファイルのコンテンツであり、必要があることをサーバー側ソフトウェアに示します。別の方法で処理されます。
「multipart/form-data」が使用されていない場合に「file」タイプの入力要素が機能しない理由は、フィールドの内容が通常のテキストフィールドと異なることをサーバーが識別する方法がないためです。 (multipart/form-dataが使用されない限り、ブラウザーはcontent-typeを送信しないため)、フィールドのコンテンツを通常のテキストとして処理します。適切なenctypeが使用され、サーバーがフィールドに含まれるデータのタイプを適切に識別できる場合、サーバーはフィールドの内容をテキストではなくファイルデータとして処理することを認識し、適切に処理できます。
ここでコメントを確認することをお勧めします: http://www.velocityreviews.com/forums/t137597-html-file-upload-using-enctype-multipart-form-data-in-form.html
簡単に言うと、enctypeはブラウザにファイルの送信方法を指示します。正しいエンコーディングタイプがないとファイルを送信できません。