Подтвердить что ты не робот

Загрузка файла с использованием MVC 4 с Ajax

Я разрабатываю веб-приложение с использованием MVC 4 + VS 2012 + Framework 4.5.

У меня есть три частичных представления, которые динамически отображаются, на моей индексной странице, основанной на действии пользователя.

Из трех частичных представлений одно частичное представление имеет Upload File функциональность с некоторыми полями ввода, такими как текстовые поля.

Проблема:

Когда пользователь нажимает кнопку сохранения (которая присутствует на частичном представлении). Я хочу сохранить поле ввода в свою базу данных и сохранить загруженный файл в общей папке.

Я хочу реализовать это с помощью Ajax (после загрузки файла и сохранения данных пользователь должен находиться на одном и том же представлении).

Как я могу реализовать то же самое? Решение JQuery будет в порядке.

Я пробовал с @Ajax.BeginForm, но после загрузки файла произошел полный пост.

4b9b3361

Ответ 1

Вот мой небольшой рабочий пример, который загружает несколько файлов и загружает их в папку, называемую "мусор"

Клиентская сторона....

    <html>
    <head>
    <title>Upload Example</title>
    <script src="~/Scripts/jquery-2.1.0.intellisense.js"></script>
    <script src="~/Scripts/jquery-2.1.0.js"></script>
    <script src="~/Scripts/jquery-2.1.0.min.js"></script>
    <script>
    $(document).ready(function () {
        $("#Upload").click(function () {
            var formData = new FormData();
            var totalFiles = document.getElementById("FileUpload").files.length;
            for (var i = 0; i < totalFiles; i++)
            {
                var file = document.getElementById("FileUpload").files[i];

                formData.append("FileUpload", file);
            }
            $.ajax({
                type: "POST",
                url: '/Home/Upload',
                data: formData,
                dataType: 'json',
                contentType: false,
                processData: false,
                success: function (response) {
                    alert('succes!!');
                },
                error: function (error) {
                    alert("errror");
                }
            });
        });
    });

</script>
</head>
<body>
    <input type="file" id="FileUpload" multiple />
    <input type="button" id="Upload" value="Upload" />
</body>
</html>

Сторона сервера....

public class HomeController : Controller
{
    [HttpPost]
    public void Upload( )
    {
        for( int i = 0 ; i < Request.Files.Count ; i++ )
        {
            var file = Request.Files[i];

            var fileName = Path.GetFileName( file.FileName );

            var path = Path.Combine( Server.MapPath( "~/Junk/" ) , fileName );
            file.SaveAs( path );    
        }

    }
}

Ответ 3

[HttpPost]
    public void Upload( )
    {
        for( int i = 0 ; i < Request.Files.Count ; i++ )
        {
            var file = Request.Files[i];

            var fileName = Path.GetFileName( file.FileName );

            var path = Path.Combine( Server.MapPath( "~/Junk/" ) , fileName );
            file.SaveAs( path );    
        }

    }