web-dev-qa-db-ja.com

enctypeプロパティがないとファイルのアップロードが機能しないのはなぜですか?

ほとんどの場合、ファイルアップロードエラーの原因は、HTMLフォームにenctypeプロパティを追加するのを忘れていることです。

通常、通常のリクエストではenctypeプロパティを追加する必要はありません。ただし、ファイルをアップロードするときに、これをHTMLフォームに追加する必要があります。

enctype="multipart/form-data"

興味がありますが、enctypeプロパティがないとファイルのアップロードが機能しないのはなぜですか?

25
Ei Maung

「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が使用され、サーバーがフィールドに含まれるデータのタイプを適切に識別できる場合、サーバーはフィールドの内容をテキストではなくファイルデータとして処理することを認識し、適切に処理できます。

29
user205890

ここでコメントを確認することをお勧めします: http://www.velocityreviews.com/forums/t137597-html-file-upload-using-enctype-multipart-form-data-in-form.html

簡単に言うと、enctypeはブラウザにファイルの送信方法を指示します。正しいエンコーディングタイプがないとファイルを送信できません。

4
James Black