簡體   English   中英

MVC 4-上載到IIS 7.5后在IE中不起作用

[英]MVC 4 - Upload Doesn't Work in IE When deployed to IIS 7.5

僅當我將其部署到實時服務器上時,才會出現此問題,它在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中工作正常,如果有任何區別,則該機器位於我們的Intranet上。

任何幫助,不勝感激

更新1:

奇怪的是,問題似乎是斷斷續續的,星期五,我的同事無法上傳任何東西,但我可以上傳,今天早上是我不能和我的同事都可以使用IE。

一切似乎都指向IIS配置問題?

更新2:

好的,看來我的問題與過期的會話/安全性有關。 我正在使用混合身份驗證方法,這導致了我的問題。

主站點使用表單身份驗證,但是我還有另一個站點可以為我執行Windows身份驗證並設置Cookie,因此禁用此功能可以解決我的問題。

不知道為什么,但是我認為這在另一個問題上會更好。

我將smartcaveman的答案標記為正確的答案,因為他的職位將我引向正確的答案/解釋。

您的問題與IIS無關。 它已斷開,因為您正在使用change事件進行連接。 IE和change事件存在已知問題。 quirksmode上可以找到一張表,該表具有與不同瀏覽器的兼容性,並且具有與此事件相關的不同HTML元素。

以下是有關該主題的幾篇博客文章:

對我而言,最明顯的方法是使用blurfocus方法。 (記錄一個焦點的值,檢查模糊的值,以及是否不同提交)。

更新

所以,它仍然無法正常工作? 這里還有一些其他值得研究的東西。

  1. 如果在提交之前嘗試從客戶端的表單字段獲取值,會發生什么情況。 例如function postFile(ctrl) { alert(document.getElementById('uploadForm').value); return false; } function postFile(ctrl) { alert(document.getElementById('uploadForm').value); return false; } 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) file == null || file.ContentLength == 0) 根據實際情況,會有不同的含義。 如果文件為空,則可能與模型綁定有關。 如果內容長度為0,則它​​至少識別出正在發送文件,但是在決定如何處理時出現了問題。 您可以通過遍歷HttpContext.Request.Form集合並寫出值來檢查是否真正接收到文件數據(這就是ASP Classic時代的做法)。 一篇文章, Valum文件上載-在Chrome中工作,但在IE中不工作,Image img = Image.FromStream(Request.InputStream)表示,具有相同問題的用戶在Request.Files集合中找到了文件內容。 您必須先檢查才能知道。 無論如何,如果文件數據位於其中之一,則您知道模型綁定中正在發生問題(並且您知道解決方法,直到找到正確的解決方法為止)。

  6. 我還在Telerik論壇上發現了一些東西,這些東西似乎描述了與它們的組件相似的事情(實際上只是您所做工作的包裝)。 它指出可能的會話超時。

我建議仔細檢查這些項目,看看其中是否有任何更多有關該問題的信息(至少肯定是第一名)。

上一次,當我編寫基於Ajax的UI時遇到同樣的問題。我使用ajax上傳文件。

不確定,但是嘗試這些鏈接可能會有所幫助

Ajax文件上載在IE7中 不起作用Valum文件上載-在Chrome中可用,但在IE中不起作用,圖像img = Image.FromStream(Request.InputStream)

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

您是通過ajax還是通過表單提交來保存postFile()文件? IE不會像chrome和firefox那樣使用(上傳的)文件名。 進行上傳調試時,請檢查代碼並檢查它們是否存在。

在IE11上為我工作的簡單解決方案: 啟用兼容模式

出於某種原因,IE11對我的上載端點執行了兩個請求...一個不帶文件,可以正常工作並返回200狀態(但是由於它沒有文件,因此對我無用),另一個請求與文件...但是第二個總是在IE中“開發人員工具”的“網絡”標簽上。 我找不到這種奇怪行為的原因。 看着服務器上的日志,我發現第二個請求從未命中服務器。

但是,這並不能解決每個人的問題,因為您必須要求系統的每個用戶都為您的網站啟用兼容模式...而且向Internet用戶提出要求不是一件好事。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM