ASP.NET MVC3 Uploadify - ошибка HTTP 500 - PullRequest
       4

ASP.NET MVC3 Uploadify - ошибка HTTP 500

0 голосов
/ 15 января 2012

Кажется, я не могу загрузить uploadify на ASP.NET MVC3, я много искал, и приведенный ниже код, кажется, работает нормально, но не для меня.Когда я пытаюсь загрузить его с помощью метода загрузки html, это работает, не так много с uploadify.Все библиотеки включены правильно.

<!-- 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>

Действие Home Controller

[HttpPost]
public ActionResult Upload(HttpPostedFileBase file)
{
    var fileName = Path.GetFileName(file.FileName); // Object reference not set to an instance of an object. I get this if I try to upload via uploadify
    file.SaveAs(Server.MapPath("~/upload/") + fileName);
    return Content(fileName);
}

Ответы [ 2 ]

4 голосов
/ 15 января 2012

Разве вы не отлаживали свой код?Разве вы не заметили, что аргумент действия 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>
0 голосов
/ 15 января 2012

Используется

HttpPostedFileBase file = Request.Files[0]; 

в моем контроллере с Uploadify

...