1

設定ページがあり、フォームからの投稿リクエストでユーザーがウェブサイトに写真をアップロードできますが、他の部分もあるため、現時点ではユーザーが写真をアップロードしたかどうかを検出できません。フォームの下部に送信ボタンが1つあります。現在、を使用しif 'file_input' in request.POST:ていますが、ユーザーが写真をアップロードしていなくても、常にtrueを返します。ユーザーが実際に写真をアップロードしたかどうかを検出するにはどうすればよいですか。htmlは次のとおりです。

<form class="group-photo" action="/${groupName}/settings" method="post" style="vertical-align:text-bottom" enctype="multipart/form-data">
            <span style="font-size:17px;font-weight:bold;">Group Photo</span>
            <img style="border-radius:15px;margin-top:5px;margin-bottom:5px;" src="/static/group/${photo_id}_120.${photo_ext}">
            <br>
            <div class="fileinputs">
                <input class="file" type="file" name="file_input" value="Choose image">

                <div class="fakefile" style="margin-left:40px;">
                    <input type="button" class="btn btn-primary" value="Choose image"/>
                </div>
            </div>
            <br/>
            <span style="font-size:17px;font-weight:bold;">Description</span>
            <textarea class="groupbio" name="groupbio">${bio}</textarea>
            <br>
            <br>
            <p><input class="btn btn-success" type="submit" name="submitted" value="Save Changes"></p>
        </form>
4

1 に答える 1

6

ブラウザーは、空の場合でもすべてのファイル入力要素をフォームに含めるため、'file_input' in request.POST'テストは常に True になりますが、空の場合は空の Unicode 文字列 ( u'') になります。

適切なファイルのアップロードにはファイル名があります。それをテストします。

if 'file_input' in request.POST and hasattr(request.POST['file_input'], 'filename'):

ファイルのアップロードはcgi.FieldStorageインスタンスであり、filenameテストはcgiモジュールのドキュメントで推奨されているものです。

フィールドがアップロードされたファイルを表す場合、value 属性または getvalue() メソッドを介して値にアクセスすると、メモリ内のファイル全体が文字列として読み取られます。これはあなたが望むものではないかもしれません。ファイル名属性またはファイル属性をテストすることで、アップロードされたファイルをテストできます。

于 2012-09-02T20:11:47.587 に答える