2

サーバーに画像をアップロードしようとしていますが、Chrome と Firefox と IE9 では動作しますが、IE8 では動作しません。リクエスト内のファイル名は、IE8 では空白として表示されますが、Chrome では表示されません。サーバーが取得するファイルは、IE8 の場合、0 キロバイト (219kb のはず) です。

HTML

<form action="$!toolsServiceUrl" enctype="multipart/form-data" method="post" id="left-section" class="section right-border container">
    <input type="hidden" name="okRedirectURL" value="$!okRedirect" />
    <input type="hidden" name="errorRedirectURL" value="$!errorRedirect" />
    <input type="hidden" name="updateSection" value="LOGO_AND_MESSAGE" />
    <input type="hidden" name="loginGuid" value="$!loginGuid" />
    <input id="current-file" class="file hide" type="file" accept="image/*" name="file"/>
    <a id="upload-now" class="btn upload open-file">$!INTL_UploadNew</a>
    <input href="#" class="btn btn-primary submit-for-review" type="submit" value="$!INTL_SubmitForReview" />
</form>

Chrome リクエスト ペイロード

------WebKitFormBoundaryhaQZT4Syn2OCktxQ
Content-Disposition: form-data; name="file"; filename="wallpaper-2055060.jpg"
Content-Type: image/jpeg

IE8 リクエスト ペイロード

-----------------------------7dc230b1a0a3a
Content-Disposition: form-data; name="file"; filename=""
Content-Type: application/octet-stream

(リクエストペイロードから無関係なデータをすべて省略しました)

かなりの数のユーザーが IE8 を使用しているため、IE8 で動作させる必要があります。

4

2 に答える 2

1

ほとんどの場合、ファイル入力フィールドを非表示にしてから、javascript を使用してクリック イベントをトリガーし、ファイル ダイアログを開きます。IE はクリックを非セキュアと見なし、サーバーに送信しません。

これを回避するには、実際のフィールドをクリックするか、<label for="idOfFileInputField">「安全な」クリック イベントをトリガーする を作成する必要があります。

コードは次のようになります。

<form action="$!toolsServiceUrl" enctype="multipart/form-data" method="post" id="left-section" class="section right-border container">
   ...
   <input id="current-file" class="file hide" type="file" accept="image/*" name="file"/>
   <label for="current-file" id="upload-now" class="btn upload open-file">$!INTL_UploadNew</label>
   ...
</form>

でファイル入力フィールドも非表示display:noneにしないでください。そうしないと、ラベルのクリックがトリガーされません。代わりにposition:absolute; left:-9999px、目に見えるビューポートから隠すようなものを作ります。

于 2014-05-15T15:52:42.117 に答える
0

リモート マシンから同じことを試してみると、異なる結果が得られる可能性があります。ファイルのアップロードに関して、IE 8 には「セキュリティ機能」(バグ) があり、アップロードされるファイルの正しいパスが送信されません。私が理解していることから、これはサイトにローカルにアクセスするときの問題にすぎません。

詳細については、このサイトをご覧ください: http://acidmartin.wordpress.com/2009/06/09/the-mystery-of-cfakepath-unveiled/

ブラウザの設定で、サイトを信頼済みサイトに追加すれば、リモート マシンからは問題ないように見えます。しかし、ローカルではまだ機能しません。

于 2012-08-31T01:16:08.077 に答える