Разве вы не отлаживали свой код?Разве вы не заметили, что аргумент действия file
всегда равен нулю, когда срабатывает действие Upload
?Аргумент вашего действия называется 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.
Другая проблема, на которую я хотел бы обратить внимание в вашем коде, заключается в том, что вы жестко закодировали абсолютно все URL-адреса в своем javascript.Это очень плохо, и есть вероятность, что ваше приложение не будет работать, когда вы развернете его в виртуальном каталоге, например, IIS.
В ASP.NET MVC вы всегда должны использовать URL-помощники при работе с 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>