2012-01-15 169 views
0

我似乎無法在ASP.NET MVC3上使用uploadify,我搜索了很多,下面的代碼似乎工作正常,但不適合我。當我嘗試通過html上傳方法嘗試上傳時,它起作用,與uploadify不同。所有庫都包含在內。ASP.NET MVC3 Uploadify - HTTP錯誤500

<!-- Not working, HTTP ERROR 500 --> 
<input id="file" type="file" name="file" /> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#file_upload').uploadify({ 
      // I tried to remove "/" at the start, does not help 
      'uploader': '/Scripts/u/uploadify.swf', 
      'script': '/home/upload', 
      'cancelImg': '/Scripts/u/cancel.png', 
      'folder': '/upload', 
      'auto': true, 
      'onError': function (event, ID, fileObj, errorObj) { 
       alert(errorObj.type + ' Error: ' + errorObj.info); 
      } 
     }); 
    }); 
</script> 

<!-- Working fine --> 
<form action="home/upload" method="post" enctype="multipart/form-data"> 
    <label for="file">Filename:</label> 
    <input type="file" name="file" id="file" /> 
    <input type="submit" /> 
</form> 

首頁控制器動作

​​
+0

什麼異常正在拋出? – 2012-01-15 16:04:34

+0

啊,也許是因爲您用於Uploadify的輸入字段的名稱被稱爲「file_upload」。您的操作需要「文件」(這是您在html版本中使用的名稱)。空引用異常可能被拋出。 – 2012-01-15 16:09:03

+0

增加了異常和不,將其更改爲「文件」,仍然發生同樣的事情。 – sed 2012-01-15 16:11:04

回答

4

沒有調試代碼?您沒有注意到Upload動作被擊中時file動作參數始終爲空嗎?你的行動的說法被稱爲file,所以你需要指定使用fileDataName選項:

'fileDataName' : 'file', 

默認情況下uploadify使用Filedata,所以如果你不想指定這個名字,你也可以調整你的行動參數名與此匹配:

[HttpPost] 
public ActionResult Upload(HttpPostedFileBase fileData) 
{ 
    var fileName = Path.GetFileName(fileData.FileName); 
    fileData.SaveAs(Path.Combine(Server.MapPath("~/upload/"), fileName)); 
    return Content(fileName); 
} 

還要確保~/upload文件夾存在於您的服務器上。它不會在您創建新的ASP.NET MVC應用程序時出現。

我想指出你的代碼的另一個問題是,你已經絕對硬編碼在你的JavaScript的所有網址。這是非常糟糕的,並且可能會導致您的應用程序在虛擬目錄中部署時無法工作,例如IIS。

在ASP.NET MVC使用URL打交道時,就像你應該總是使用網址助手:

<script src="@Url.Content("~/Scripts/u/jquery.uploadify.v2.1.4.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/u/swfobject.js")" type="text/javascript"></script> 

<input id="file_upload" type="file" name="file" /> 

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#file_upload').uploadify({ 
      'uploader': '@Url.Content("~/Scripts/u/uploadify.swf")', 
      'script': '@Url.Action("upload", "home")', 
      'cancelImg': '@Url.Content("~/Scripts/u/cancel.png")', 
      'folder': '@Url.Content("~/upload")', 
      'auto': true, 
      'onError': function (event, ID, fileObj, errorObj) { 
       alert(errorObj.type + ' Error: ' + errorObj.info); 
      } 
     }); 
    }); 
</script> 
0

是在我的控制器使用

HttpPostedFileBase file = Request.Files[0]; 

與Uploadify