2

この問題は、これをライブサーバーに展開した場合にのみ発生し、Visual Studio Webサーバーの開発マシンで正常に機能し、IE(8と9の両方)でのみ問題になります。

このフォームでjpegを投稿しています...

<form method="post" id="uploadForm" enctype="multipart/form-data" action="/ImageUpload/UploadImageNew">
   <input type="file" onchange="postFile()" name="file"></div>
   <input type="submit" value="OK">
</form>

このJavaScriptを使用して...

function postFile(ctrl) {
    document.getElementById('uploadForm').submit();
}

このコントローラーに...

[HttpPost]
public ActionResult UploadImageNew(HttpPostedFileBase file)
{
    // Verify that the user selected a file
    if (file != null && file.ContentLength > 0)
    {
        file.SaveAs("AFilename.file");
     }
     else
     {
         throw new Exception("File not found")
     }
     return View("UploadImageNew");
}

IEではfile.ContentLength=0になりますが、FFとChromeでは正常に機能します。違いが生じる場合は、マシンはイントラネット上にあります。

どんな助けでも大歓迎

更新1:

奇妙なことに、問題は断続的に発生しているようです。金曜日に同僚は何もアップロードできませんでしたが、今朝はアップロードできなかったのは私であり、同僚は両方ともIEを使用できます。

すべてがIIS構成の問題を示しているようですか?

更新2:

わかりました。私の問題は期限切れのセッション/セキュリティに関連しているようです。ハイブリッド認証方式を使用していますが、問題が発生しています。

メインサイトはフォーム認証を使用していますが、Windows認証を実行してCookieを設定する別のサイトがあり、これを無効にすると問題が修正されました。

理由はまだわかりませんが、別の質問ではこれが良いと思います。

彼の投稿が私を正しい答え/説明に導いてくれるので、私はsmartcavemanの答えを正しいものとしてマークしています。

4

3 に答える 3

1

あなたの問題は IIS とは何の関係もありません。changeイベントを使用して配線しているため、壊れています。IE とchangeイベントには既知の問題があります。さまざまな HTML 要素でのこのイベントとのさまざまなブラウザーの互換性を示す表は、quirksmodeで入手できます。

この件に関するブログ記事をいくつか紹介します。

これを行うために私が思いつく最も明白な方法は、代わりにblurandメソッドを使用することです。focus(フォーカス時に値を記録し、ぼかし時にチェックし、異なる場合は送信します)。

アップデート

それで、それはまだ機能していませんか?ここでは、検討する価値のある他のいくつかのことを示します。

  1. 送信する前に、クライアント側のフォーム フィールドから値を取得しようとするとどうなりますか。例えばfunction postFile(ctrl) { alert(document.getElementById('uploadForm').value); return false; }。値はありますか?また、JavaScript を使用しないライブ環境で機能が動作することは確認されていますか? (たとえば、通常どおりフォームを送信するだけです)。そうであれば、問題はフロントエンドにあると確信できます。そうでない場合、JS は問題なく、問題はバックエンドにあります。

  2. リクエストの最大長 / コンテンツの最大長。あなたの投稿へのコメントで、maxRequestLength で最大 2GB を有効にしたと述べました。ただし、これは IIS7 と IIS6 (以前のテスト環境の場合は Casini) での動作が少し異なります。これに関する詳細はこのブログで引用されていますが、要約すると、web.config の system.webServer セクションに設定があり、その値が実際にその動作を表していることを確認する必要があります。詳細は記事に。

  3. 例外処理機能やロギング機能はありますか? リクエストが放棄される原因となっている例外をどこかで飲み込んでいる可能性はありますか? try - catchリクエストが失敗する原因となる根本的なエラーからビューを保護している可能性のある空のブロックはありますか? ロギングを有効にしている場合、自分が試みた使用法と同僚の使用法を区別できますか?

  4. ライブ サイトのファイル構造について、開発環境と異なる点はありますか? ハードコーディングされたフォーム アクション/ImageUpload/UploadImageNewターゲットがあることに気付きました。これは、アプリケーションが着信ルートを照合する機能に影響を与える可能性があります。

  5. コンテンツの長さが 0 であるとコメントで述べましたが、これを判断するために使用したテストが投稿にあるものである場合は、間違っている可能性があります。あなたのテストは と同等file == null || file.ContentLength == 0)です。どちらが実際に当てはまるかによって、さまざまな意味があります。ファイルが null の場合は、モデル バインディングに関連している可能性があります。コンテンツの長さが 0 の場合、少なくともファイルが送信されていることは認識されますが、それに対して何をすべきかを決定するときに何か問題が発生します。コレクションをループして値を書き出すことにより、実際にファイル データを受信して​​いるかどうかを確認できHttpContext.Request.Formます (ASP Classic の時代には、これが使用されていました)。この他の投稿、Valum file upload - Works in Chrome but not IE, Image img = Image.FromStream(Request.InputStream)、同じ種類の問題を持つユーザーがRequest.Filesコレクション内のファイル コンテンツを見つけたと述べています。確認しないと正確にはわかりません。とにかく、ファイル データがこれらの場所のいずれかにある場合は、問題がモデル バインドで発生していることがわかります (そして、それを修正する適切な方法が見つかるまで回避策がわかります)。

  6. また、 Telerik フォーラムで、コンポーネントで発生する同様のことを説明しているように見えるものを見つけました(これは、実際に行っていることのラッパーにすぎません)。これは、セッション タイムアウトの可能性を示しています。

これらの項目を調べて、問題についてさらに明らかになるものがあるかどうかを確認することをお勧めします (少なくとも #1 は確実です)。

于 2012-06-06T11:39:48.963 に答える
0

前回、ajaxベースのUIを作成するときに同じ問題が発生しました。ajaxを使用してファイルをアップロードします。そのときは、問題が発生するだけです。

わかりませんが、これらのリンクを試してみてください

AjaxファイルのアップロードがIE7で機能し ないValumファイルのアップロード-Chromeで機能しますが、IEでは機能しません。Imageimg = Image.FromStream(Request.InputStream)

http://haacked.com/archive/2010/07/16/uploading-files-with-aspnetmvc.aspx

postFile()はajaxまたはフォーム送信でファイルを保存しますか?IEは、chromeやfirefoxのように(アップロードの)ファイル名を取得しません。アップロードを行うときは、コードをデバッグし、それらが存在するかどうかを確認します。

于 2012-06-06T01:16:28.767 に答える