Загрузить действия контроллера и проблемы с сохранением файлов - PullRequest
0 голосов
/ 30 марта 2012

Я использую элемент управления uploadify в своем приложении ASP.NET MVC для загрузки выбранных пользователем файлов.Я поместил следующий код в файл .js:

$("#file_upload").uploadify({
    'uploader': '/Scripts/uploadify/uploadify.swf',
    'script': '/File/Upload',
    'cancelImg': '/Scripts/uploadify/cancel.png',
    'fileExt': '*.jpg;*.gif;*.png;*.bmp;*.htm;*.html;*.txt;*.zip',
    'fileDesc': '*.jpg;*.gif;*.png;*.bmp;*.htm;*.html;*.txt;*.zip',
    'auto': true,
    'multi': true,
    'sizeLimit': 1048576,
    'buttonText': 'Upload Files',

    'onComplete': function (event, queueID, fileObj, response, data) {
        alert(fileObj.name);       
    }
});

Контроллер имеет следующий код:

    public class FileController : Controller
    {
        private static string uploadedHTMLFile = string.Empty;

        [HttpPost]
        public ActionResult Upload(HttpPostedFileBase fileData)
        {
//do something
            }
}

У меня две проблемы:

  1. Действие контроллера не вызывается.
  2. Предупреждение OnComplete срабатывает, но загруженный файл просто исчезает с экрана после запуска этого события.Как сохранить список файлов, загруженных на экран?

<input type="file" name="file_upload" id="file_upload" /> определен в файле .cshtml.

Ответы [ 2 ]

0 голосов
/ 24 декабря 2012

Причиной того, что действие контроллера не вызывается, является то, что имя вашего input type="file" не совпадает с параметром действия контроллера.

Попробуйте так в вашем контроллере:

[HttpPost]
public ActionResult Upload(HttpPostedFileBase file_upload)
{
}

Вы можете либо изменить имя типа ввода на fileData, либо изменить имя параметра на свое действие, как указано выше.

Я не уверен, что мое решение для второй проблемы решается, но это может

Попробуйте использовать 'removeCompleted': false в параметрах загрузки, чтобы, даже если загрузка файла прошла успешно, он остался на странице без исчезновения.

Надеюсь, это поможет.

0 голосов
/ 30 марта 2012

Попробуйте следующее.

Контроллер:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Upload(HttpPostedFileBase fileData)
    {
        if (fileData != null && fileData.ContentLength > 0)
        {
            var appData = Server.MapPath("~/app_data");
            var filename = Path.Combine(appData, Path.GetFileName(fileData.FileName));
            fileData.SaveAs(filename);
        }
        return Json(true);
    }
}

Index.cshtml Просмотр:

<input type="file" name="fileInput1" id="fileInput1" data-upload-url="@Url.Action("upload")" data-uploadify-root="@Url.Content("~/scripts")" />

Layout.cshtml ссылки на сценарии:

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

myscript.js:

$(function () {
    var fileInput = $('#fileInput1');
    var uploadifyRoot = fileInput.data('uploadify-root');
    var uploadUrl = fileInput.data('upload-url');
    fileInput.uploadify({
        'uploader': uploadifyRoot + '/uploadify.swf',
        'script': uploadUrl,
        'cancelImg': uploadifyRoot + '/cancel.png',
        'fileExt': '*.jpg;*.gif;*.png;*.bmp;*.htm;*.html;*.txt;*.zip',
        'fileDesc': '*.jpg;*.gif;*.png;*.bmp;*.htm;*.html;*.txt;*.zip',
        'auto': true,
        'multi': true,
        'sizeLimit': 1048576,
        'buttonText': 'Upload Files',
        'onComplete': function (event, queueID, fileObj, response, data) {
            alert(fileObj.name);
        }
    });
});
...