2011-10-02 40 views
0

我已經在ASP.MVC中實現了上傳功能。我正在使用jQuery.BlockUIJQuery.Form插件(但我不知道這是非常重要的)。 Google Chrome瀏覽器中的所有功能都很完美。圖片上傳在mozilla和Internet Explorer中不起作用 - 要求保存文件

但是在Mozilla和Internet Explorer中並沒有。當我嘗試上傳圖像時,它會彈出一個窗口詢問我:

上傳。你已選擇打開上傳這是一個:應用程序/ json 從http://localhost:2993 Firefox應該用這個文件做什麼?

而我已打開/保存和瀏覽選項。

在我上傳的方法,我返回JSON這裏是代碼:

[HttpPost] 
public JsonResult Upload() 
{ 
    string savedFileName = null; 
    string hName = null; 
    for (int i = 0; i < Request.Files.Count; i++) 
    { 
     HttpPostedFileBase hpf = Request.Files[i] as HttpPostedFileBase; 
     if (hpf.ContentLength == 0) 
     continue; 

     string savedFileNameThumb = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, 
        "Content", "Images", "Thumb", 
        Path.GetFileName(hpf.FileName)); 

     savedFileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, 
        "Content", "Images", "Full", 
        Path.GetFileName(hpf.FileName)); 
     hName = hpf.FileName; 

     ImageModel.ResizeAndSave(savedFileName, hpf.FileName, hpf.InputStream, int.MaxValue, false); 
     // for cropping 
     ImageModel.ResizeAndSave(savedFileName, hpf.FileName, hpf.InputStream, 540, false); 
    } 

    string r = string.Format("../../Content/Images/Full/{0}", hName); 
    return Json(new { foo = r }); 
} 

什麼產生這個錯誤?

回答

3

您正在將上傳的JSON作爲頁面返回給用戶。 JSON對普通用戶沒有任何意義,所以大多數瀏覽器沒有任何預定義的方式來顯示JSON。

如果返回的頁面顯示在某處,您應該返回一個常規的HTML頁面,這對用戶來說意味着什麼。如果頁面沒有真正顯示在某處(例如,以隱藏框架加載),則應該返回一個空的HTML頁面,所有瀏覽器都知道如何顯示。

+0

@ 1110:結果將作爲由瀏覽器頁面進行處理,所以它必須是一個頁面。如果您需要返回任何信息,則必須將其放入頁面中,可以在加載頁面時運行的腳本中,也可以將其放入可從其他腳本訪問的元素中。 – Guffa

+0

真的嗎?這是一個答案?我可以想到爲什麼你想讓你的上傳腳本返回json。最明顯的原因是你已經在js上完成了一個異步文件上傳,而你不想離開當前頁面/應用程序。這裏的錯誤是瀏覽器不期待json,因爲請求/響應是如何設置的,因此試圖打開它而不是僅僅使用js中的數據。 – FlavorScape

+1

@FlavorScape:Badmouthing其他答案是不是很有禮貌。 – Guffa

相關問題