c# - 为 jquery 文件上传编写服务器端处理程序

标签 c# jquery ajax asp.net-mvc jquery-file-upload

我正在尝试获取 blueimp jQuery-File-Upload在我的 MVC 应用程序中工作的组件。

到目前为止,这是我的代码。

JavaScript:

$('#fileupload').fileupload({
    url: '@Url.Action("AddAttachment", "File")',
    dataType: 'json',
    progressall: function (e, data) {
        var progress = parseInt(data.loaded / data.total * 100, 10);
        console.log(progress);
    },
    add: function(e, data) {
        data.submit();
    },
    done: function (e, data) {
        $.each(data.result.files, function (index, file) {
            $('<p/>').text(file.name).appendTo(document.body);
        });
    }
});

Controller :

[HttpPost]
public JsonResult AddAttachment()
{
    var files = new List<FileAttachmentFileModel>();

    try
    {
        if (Request.Files.Count > 0)
        {
            using (var dbContext = new vegaEntities())
            using (var transaction = dbContext.Database.BeginTransaction())
            {
                for (int i = 0; i < Request.Files.Count; i++)
                {
                    HttpPostedFileBase file = Request.Files[i];

                    if (file.ContentLength > 0)
                    {
                        FileAttachment fileAttachment = new FileAttachment
                        {
                            Id = Guid.NewGuid(),
                            FileName = file.FileName,
                            ContentType = file.ContentType,
                            DateAdded = DateTime.UtcNow
                        };
                        // Load content
                        fileAttachment.Content = new byte[file.ContentLength];
                        file.InputStream.Read(fileAttachment.Content, 0, file.ContentLength);
                        // Add to database
                        dbContext.FileAttachments.Add(fileAttachment);
                        // Add to results
                        files.Add(new FileAttachmentFileModel
                        {
                            id = fileAttachment.Id.ToString(),
                            name = file.FileName,
                            size = file.ContentLength.FormatAsFileSize(),
                            //action = FileAttachmentFileModel.AddAction
                        });
                    }
                }
                dbContext.SaveChanges();
                transaction.Commit();
            }
        }
    }
    catch (Exception ex)
    {
        // TODO:
        return Json(new { message = ex.Message });
    }
    return Json(new { files = files });
}

此代码适用于较小的文件。我的 C# 方法被调用,文件被检索,progressall 处理程序被调用,显示 100%。

问题是当我尝试上传一个大文件时(progressall 处理程序被调用不止一次)。在这种情况下,处理程序将按预期以最高 100% 的递增进度值被调用。但是我的 C# 方法从未被调用,浏览器报告以下错误。

POST http://localhost:1290/File/AddAttachment 404 (Not Found)

我对这个错误感到困惑,因为 C# 方法在这两种情况下是相同的。为什么它在一个中找到而在另一个中找不到。我假设问题是我的 Controller 方法需要一个完整的文件,我必须改为编写代码来处理分块上传。这是正确的吗?谁能指出有关如何使用 C#/MVC 编写上传处理程序的文档?

最佳答案

该死!这是超出最大文件大小的问题。我知道这个。我以前处理过。但是我对 404 错误感到困惑!哦!

关于c# - 为 jquery 文件上传编写服务器端处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47168211/

相关文章:

jquery - Sidr菜单打开时如何显示关闭图标

jquery - 如何在 jQuery 中引用井号 (#)?

c# - 通用列表/字典

c# - TextBox LostFocus 事件发生得太频繁

c# - 静态构造函数 - C# 中的单例设计模式

javascript - 尝试按顺序运行 javascript AJAX 调用

javascript - 如何使用 AJAX 调用将数据从 JavaScript 传输到模型

C# datetime format无法比较

javascript - 如何在setInterval函数中播放声音?

javascript - 为什么 XPath 从 jQuery 中删除?